题解 | #最长无重复子数组#
最长无重复子数组
http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
用map记录元素出现在数组里的位置
如果数到绿色箭头的3,重复了,下次开始计数的下标挪到元素4.
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
int len=arr.size();
unordered_map<int,int> mark;
int ans=0,cnt=0;
for(int i=0;i<len;)
{
if(mark.find(arr[i])==mark.end())
{
cnt++;
mark[arr[i]]=i;
i++;
}
else
{
ans=max(ans,cnt);
cnt=0;
i=mark[arr[i]]+1;//更新下次的下标
mark.clear();
}
ans=max(ans,cnt);
}
return ans;
}
};
