2021-08-05 数组的度

力扣

//维护一个哈希表,其中存储了每个数字出现的次数、其第一次出现的位置以及最后一次出现的位置
//最短连续子数组必然包含出现频次最高的数字的所有个体,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;
    }
};



上一篇:7-8 点赞(需要继续改进)


下一篇:前端 JavaScript 获取字符串中重复次数最多的字符