给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。
你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
int len = nums.size();
unordered_map<int,int> left,right,my_count;
int degree = 0;
for(int i = 0;i<len;++i){
if(!left.count(nums[i])){//如果第一个元素的个数不存在,那么初始化他的位置就是i
left[nums[i]] = i;
}
//现在出现nums[i]一定不是第一次出现了,把现在出现的位置刷新给right
right[nums[i]] = i;
//出现nums[i]就加一次
my_count[nums[i]]++;
degree = max(degree,my_count[nums[i]]);
}
//遍历my_count,然后找到和degree相等的value,找到对应的key
int res = nums.size();
for(auto &k:my_count){
if(k.second==degree){
res = min(res,right[k.first]-left[k.first]+1);
}
}
return res;
}
};