697 LeetCode 数组的度

题目描述:
在这里插入图片描述
思路: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;
    }
};
发布了123 篇原创文章 · 获赞 0 · 访问量 963

猜你喜欢

转载自blog.csdn.net/peachzy/article/details/104265259
今日推荐