LeetCode 697. 数组的度
原题链接
简单
作者:
wyf
,
2021-02-20 10:56:02
,
所有人可见
,
阅读 378
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
unordered_map<int,int> hash;//用于记录每个数出现次数
for(auto c:nums)hash[c]++;
int maxc=0;//存出现次数最多的数出现的次数
for(auto [k,v]:hash)maxc=max(maxc,v);
vector<int> t;
for(auto [k,v]:hash){//存出现次数最多的数有哪些
if(v==maxc)t.push_back(k);
}
int res=INT_MAX;
for(auto c:t){//遍历出现次数最多的数
int l,r;//区间长度必然是从前向后数的第一个该数的下标和从前向后数的第一个该数的下标之差+1
for(int i=0;i<nums.size();i++)
if(nums[i]==c){
l=i;
break;
}
for(int i=nums.size()-1;i>=0;i--)
if(nums[i]==c){
r=i;
break;
}
res=min(res,r-l+1);
}
return res;
}
};