先用HashMap求出数组的度,然后再用滑动窗口求出最小区间。
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
unordered_map<int,int> hashmap;
int count1 = 0, res = nums.size(), count2 = 0, n = nums.size();
int index = 0;
for(auto num:nums){
hashmap[num]++;
count1 = max(count1,hashmap[num]);
}
hashmap.clear();
for(int i=0,j=0;i<n;i++){
while(j<n&&count2<count1){
hashmap[nums[j]]++;
if(hashmap[nums[j]]>=count2){
count2 = hashmap[nums[j]];
index = nums[j];
}
j++;
}
if(count2==count1){
res = min(res,j-i);
}
if(nums[i]==index){
count2--;
}
hashmap[nums[i]]--;
}
return res;
}
};