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

如果您觉得本篇文章对您有帮助,可以点个赞,感谢~