leetcode 697. 数组的度

20210220 每日一题
节后复健
思路:简单暴力,因为数据范围很小所以直接开50000大小的三个数组就可以了,一个记录某个数第一次出现的地点,一个记录当前最后一次出现的地点,一个记录该数出现的次数。只需要考虑一次循环中间,更新最大次数的时候记录最小长度作为答案就可以了。

class Solution {
public:
    int first[50000],last[50000],app[50000];
    int maxlen=0,ans=500000;
    int findShortestSubArray(vector<int>& nums) {
        int len=nums.size();
        for(int i=0;i<len;++i){
            if(app[nums[i]]==0) first[nums[i]]=i;
            last[nums[i]]=i;
            app[nums[i]]++;
            if(app[nums[i]]>maxlen){
                maxlen=app[nums[i]];
                ans=last[nums[i]]-first[nums[i]]+1;
            }
            else if(app[nums[i]]==maxlen){
                ans=min(ans,last[nums[i]]-first[nums[i]]+1);
            }
        }
        return ans;
    }
};

每日一题:想到还有一周要离开家,就有点舍不得。虽然在家会比较颓废,不思进取,果然我是个腊鸡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值