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

最长无重复子数组

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

这道题主要因为是找最长无重复子数组,只需要从前往后遍历数组就可以,难点是回溯到发生冲突的位置,将其及其之前的元素都从hash表里面去除,可以用双指针来记录这次无冲突重复数组的起始位置和冲突位置,也可以用一个数来记录这次无冲突数组长度,冲突位置减去长度就是起始位置

#include <map>
class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        map<int,int> hash_map;
        int num=0,max=0;
        for(int i=0;i<arr.size();i++){
            if(!hash_map[arr[i]]){
                num++;
                hash_map[arr[i]]++;
            }
            else {
                while(arr[i-num]!=arr[i]){
                    hash_map.erase(arr[i-num]);
                    num--;
                }
            }
            if(max<num)
                max=num;
        }
        return max;
    }
};
全部评论

相关推荐

头像
11-26 16:06
已编辑
中南大学 后端
快手电商 后端 23k-35k
点赞 评论 收藏
分享
有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务