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