class Solution {
public:
int maxLength(vector<int>& arr) {
//子数组是连续的,也就是找出数组的不重复的最大长度
//利用左右指针,右指针扩张更新最大长度,遇到重复则缩小左指针,直到没有重复
unordered_set<int> order;
int max_len = 0;
int left = 0;
int right = 0;
while( right<arr.size() ){
while( right < arr.size() && !order.count( arr[right] ) ){
order.insert(arr[right]); //没有找到,没有重复,那么增加右边界
max_len = max( max_len, right - left + 1 ); // 记录最大长度
right++;
} //right超出边界 或者 arr[right] 遇见重复
while( right < arr.size() ){ //没有超出,则有重复
if(arr[right] == arr[left]){
order.erase(arr[left]); //找到了重复,则弹出,终止循环
left++;
break;
}else{
order.erase(arr[left]); //没有找到重复,则弹出, 继续循环
left++;
}
}
}
return max_len;
}
};