解法:用map记录当前的unique数,扫描一遍
/*
扫描的时候,如果unique数不超过,则继续从右边添加,
否则从左边持续删除,直到unique数回到正常的水平
*/
int getLen(vector<int> num, int unique) {
int left, right, len = num.length();
int max_len = 0;
left = right = 0;
if(len == 0) return 0;
map<int, int> m;
m[num[0]] = 1;
while(right < len-1) {
if(m.count() <= unique) {
++right;
if(m.find(num[right]]) m[num[right]] = m[num[right]]+1;
else m[num[right]] = 1;
}
else {
m[num[left]] = m[num[left]] - 1;
if(m[num[left]] == 0) m.erase(num[left]);
++left;
}
max_len = max(max_len, right - left + 1);
}
return max_len;
}