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;
}
};
每日一题:想到还有一周要离开家,就有点舍不得。虽然在家会比较颓废,不思进取,果然我是个腊鸡。