#include <set>
#include <unordered_map>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
  //本解法使用滑动窗口,特色是不使用哈希表,使用set,通过set的count方法判断元素是否重复
    int maxLength(vector<int>& arr) {
        // write code here
        int n=arr.size();
        std::set<int> myset;
        if(n==0) return 0;
        if(n==1) return 1;
        int res=0;
        int left=0;
        for(int right=0;right<n;++right){
            if(myset.count(arr[right])==0){
                myset.insert(arr[right]);
                res=max(res,static_cast<int>(myset.size()));
                continue;
            }else{
                while(myset.count(arr[right])!=0){
                    myset.erase(arr[left]);
                    left++;
                }
            }
            myset.insert(arr[right]);
            res=max(res,static_cast<int>(myset.size()));
        }
        return res;
    }
};