力扣
//维护一个哈希表,其中存储了每个数字出现的次数、其第一次出现的位置以及最后一次出现的位置
//最短连续子数组必然包含出现频次最高的数字的所有个体,minLen = vec[2] - vec[1] + 1
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
unordered_map<int,vector<int>> map;
int n = nums.size();
for(int i= 0;i<n;i++)
{
if(map.count(nums[i]))
{
map[nums[i]][0]++;
map[nums[i]][2] = i;
}else{
map[nums[i]] = {1,i,i};
}
}
int maxNum = 0;
int minLen = 0;
for(auto [_,vec] : map)
{
if(maxNum < vec[0])
{
maxNum = vec[0];
minLen = vec[2] - vec[1] + 1;
}else if(maxNum == vec[0])
{
if(minLen > vec[2] - vec[1] + 1 )
{
minLen = vec[2] - vec[1] + 1;
}
}
}
return minLen;
}
};