leetcode刷题篇 697题 数组的度 java版

题目概览:
在这里插入图片描述
思路分析:
两步走:
第一:先找到出现频率最高的数字
第二:把包含频率最高数据的数组找到

遍历数组,使用3个哈希map来分别记录,每个值出现的左右下标和出现的次数,根据出现次数找到,频率最高的数字

然后找出包含这个数字的长度最短的数组

看代码:

class Solution {
    public int findShortestSubArray(int[] nums) {
        HashMap<Integer, Integer> count = new HashMap<>();
        HashMap<Integer, Integer> left = new HashMap<>();
        HashMap<Integer, Integer> right = new HashMap<>();

        for (int i = 0; i < nums.length; i++) {
            if (!left.containsKey(nums[i])) {
                left.put(nums[i], i);
            }
            right.put(nums[i], i);
            count.put(nums[i], count.getOrDefault(nums[i], 0) + 1);
        }

        int ans = nums.length;
        int degree = Collections.max(count.values());
        for (int x : count.keySet()) {
            if (count.get(x) == degree) {
                ans = Math.min(ans, right.get(x) - left.get(x) + 1);
            }
        }
        return ans;
    }
}

在这里插入图片描述


版权声明:本文为weixin_45806131原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。