class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        if(arr.size()<=1){
            return arr.size();
        }
        int max_size = 0;
        map<int,int> arr_map;
        int now_head = 0;

        for(int i=0;i<arr.size();i++){
            if(arr_map.find(arr[i])!=arr_map.end()){

                if(arr_map.size()>max_size){
                    max_size = arr_map.size();
                }

                int new_head  = arr_map[arr[i]]+1;
                for(int j=now_head;j<new_head;j++){
                    arr_map.erase(arr[j]);
                }
                now_head = new_head;
            }
            arr_map[arr[i]] = i;

        }
        if(arr_map.size()>max_size){
            max_size = arr_map.size();
        }
        return max_size;
    }
};