题解 | #最长无重复子数组#

最长无重复子数组

http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

  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;

    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

01-17 08:34
门头沟学院 Java
想找对象的单身狗在努力存钱:这工资不低了,再高点人家要招博士硕士的
点赞 评论 收藏
分享
黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务