https://leetcode-cn.com/problems/degree-of-an-array/
思路:首先遍历一遍统计数组的度,之后维护滑动窗口,保证窗口内的度等于最大值即可。
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
vector<int> cnt(50000);
int n=nums.size(),MAX=0;
for(int i=0;i<n;i++)
if(++cnt[nums[i]]>MAX)
MAX=cnt[nums[i]];
for(int i=0;i<50000;i++)
cnt[i]=0;
int ans=n,l=0,r=0;
while(r<n)
{
if(++cnt[nums[r]]==MAX)
{
while(nums[l]!=nums[r])
--cnt[nums[l++]];
ans=min(ans,r-l+1);
}
++r;
}
return ans;
}
};