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
如果您觉得本篇文章对您有帮助,可以点个赞,感谢~