import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型一维数组
*/
public int[] findMode (int[] nums) {
HashMap<Integer, Integer> hashMap = new HashMap<>();
// result数组用于返回答案
int [] result = new int[nums.length];
// max用于记录最大"众数"的频率
int max = 1;
// number用于记录最大众数是哪个数字
int number = 1;
for (int i = 0; i < nums.length; i++) {
// 放入map集合记录数字和出现频率
hashMap.put(nums[i], hashMap.getOrDefault(nums[i], 0) + 1);
// 找到频率最大的数字和它的频率,并记录
Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet();
for (Map.Entry<Integer, Integer> entry : entries) {
Integer value = entry.getValue();
if (value >= max) {
max = value;
number = entry.getKey();
}
}
// 获取当前数字的频率
Integer integer = hashMap.get(nums[i]);
// 如果频率比当前众数的频率大于等于并且数字编号大于众数,那么就会赋值成当前的nums[i]
if (integer >= max && nums[i] > number) {
result[i] = nums[i];
} else {
// 否则就会以众数赋值
result[i] = number;
}
}
// 返回结果即可
return result;
}
}
本题知识点分析:
1.哈希表存取
2.数组遍历
3.数学模拟
本题解题思路分析:
1.放入map集合记录数字和出现频率
2. 找到频率最大的数字和它的频率,并记录
3.获取当前数字的频率
4.如果频率比当前众数的频率大于等于并且数字编号大于众数,那么就会赋值成当前的nums[i]
5.否则就会以众数赋值
6.最后返回result结果数组即可
本题使用编程语言: Java
如果您觉得本篇文章对您有帮助,可以点个赞,感谢~

京公网安备 11010502036488号