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; } };