1. 建立一个左开看,右闭得滑动窗口。
  2. 注意if 未必要和else链接,有的时候满足一个条件,窗口大小会突变。
  3. 应用map做这个题是最好的选择。
  4. 注意刚开始的返回条件,对于不同的题是不一致的。比如这个直接返回size()
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 left = -1;

        map<int,int> window;
        window[arr[0]]=0; //先放入第一个元素

        int max_window_length = 0;

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

                left = max(left,window[arr[i]]);//移动左端点。立马不要前面的端点内容,直接让left
                //移动到那个重复的点,且不包括

            }
           //注意只是前面是条件罢了,后面照样进行,如果进了前面的窗口大小回立马缩小。
                max_window_length = max(max_window_length,i-left);
                window[arr[i]] = i;


        }

        return max_window_length;

    }
};