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