class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
unordered_map<int, int> map(20);
int start=0, end=0;
int size = arr.size();
int ans = 0;
for(int i=0; i<size; i++){
//数字已经存在于哈希表中
if(map.find(arr[i])!=map.end()){
//把start置为重复元素的后一个元素的下标
//max表示上一个start在2个重复元素之间,
//比如1,3,3,1,在第二个3的处理中,start被置为2,在处理最后一个1的时候,如果按照start = map.find(arr[i])->second+1;
//那么start为0, 这显然不对,正确的start应该为2,即start应该取start和map.find(arr[i])->second+1的最大值(最右边的值)
start = max(map.find(arr[i])->second + 1, start);
//start = map.find(arr[i])->second+1;
//去掉前一个重复的元素a,以储存后一个重复的元素a
map.erase(arr[i]);
}
ans = max(ans,i-start+1);
map.insert(make_pair(arr[i], i));
}
return ans;
}
};