作者:duangjai_602 | 来源:互联网 | 2023-09-13 18:03
题目概览:
思路分析:
两步走:
第一:先找到出现频率最高的数字
第二:把包含频率最高数据的数组找到
遍历数组,使用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;
}
}