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

最长无重复子数组

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

使用set完美解答

前排一些解答给了思路,但细节代码都有不少问题,在此予以重述。

1.整体思路

设置两个索引指针left和right,分别指向arr的0和1,right++向右走的过程中加入arr[i]到set,同时要判断当前set集合总是否有arr[i]的重复元素,有的话需要循环从头删除知道删到此重复元素。每次加入arr[i]到set后,判断ret结果。所以,所有arr元素都需要加入到set!但每次加入需要做查重、删除的操作,并设置ret实时获取set的最大值(即最终结果)。

2.错误判断

由于left指针设置为0,而right指针为1,我们需要考虑arr大小为空或者1时的结果。

3.容器的使用

并不要用map,用set即可,当然map也可以,但只用了键,值没用到,多少有点浪费存储资源。、

希望对你有所帮助。

整体代码如下:

public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        if(arr.empty()) return 0;
        if(arr.size() == 1) return 1;
        int ret=0;
        set<int> s;
        s.insert(arr[0]);
        int left=0;int right = 1;
        
        while(left<=right && right<arr.size()){
            if(s.count(arr[right])){
                while(arr[left]!= arr[right]){
                    s.erase(arr[left]);
                    left++;
                }
                left++;
            }
            s.insert(arr[right]);
            
            ret = ret<s.size() ? s.size():ret;
            right++;
        }
        return ret;
        
    }
};
全部评论

相关推荐

小鹏、大疆、米哈游、MinMax小鹏上午投的下午就约面,进度未免也太快了
蛇年行大运fff:哥们 盗贴有意思吗,我发xhs上的给你搬过来了😅😅😅
点赞 评论 收藏
分享
zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
Hakasee:我的简历和你的基本一样,上周去了上海,boss投了三百家, 三家线下面试 第一家没有做题,全是八股和项目,因为第一次面试不怎么熟练,挂了 第二家,给你几个题目(①css垂直居中文字,字体每两秒闪烁一下以及点击弹窗,②给你一个链接,实现可视化地图,③然后是八股,图片性能优化,以及对图片app有什么想法),45分钟内做完,然后老板面试) 第三家特别偏僻,有点阴森,到了之后让了一个工位给我,有四个题目,①格式化时间 年月日当前时间星期几② 正则表达式提取新闻文字,③在文本域输入文字生成选择题以及选项④生成商品排版还是什么来着 三家都是不超过50人的小公司 两家线上牛客笔试(卡伦特,七牛云,但是笔试不仅要考前端,还要考后端,算法,甚至数学题 我的建议是如果只做了这两个vue项目且不怎么熟练的情况下,先沉淀沉淀,把react学了,上海好的公司基本都是react查看图片
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务