题目描述:
思路:1、找到数组中出现最多的元素的次数和元素,次数放在map中,元素放在vector中
2、记录出现次数最多的元素的位置
3、根据vector中记录的出现次数最多的元素,计算他们的长度,并且比较他们的大小,求出最小值;
代码如下:
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
map<int,int>cnt1;
map<int,int>cnt3;
map<int,int>cnt4;
map<int,int>cnt5;
vector<int>cnt2;
int a=0,res=nums.size();
for(int i=0;i<nums.size();i++){
cnt1[nums[i]]++;
}
for(int i=0;i<nums.size();i++){
a=max(a,cnt1[nums[i]]);
}
for(int i=0;i<nums.size();i++){
if(cnt1[nums[i]]==a)
cnt2.push_back(nums[i]);
}
for(int i=0;i<nums.size();i++){
cnt3[nums[i]]++;
if(cnt3[nums[i]]==1)
cnt4[nums[i]]=i;
if(cnt3[nums[i]]!=1)
cnt5[nums[i]]=i;
}
for(int i=0;i<cnt2.size();i++){
res=min(res,abs(cnt5[cnt2[i]]-cnt4[cnt2[i]])+1);
}
return res;
}
};