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

最长无重复子数组

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        /*
        0 1 2 3 4 5 6 7 8
        1 2 3 4 5 6 2 9 7
        需要考虑没有重复的
        */
        int left = 0, right = 0;
        int maxi = 0;
        int dup = 0; //判断右边是否有重复的,还是走到头了
        set<int> st;
        if(arr.size()<=1)
            return arr.size();
        
        while(left<=right && right<arr.size())
        {
            while(right<arr.size())
            {
                if(find(st.begin(),st.end(),arr[right])==st.end())
                {
                    st.insert(arr[right]);
                    right++;
                }
                else 
                {
                    dup = 1;
                    if(right-left>maxi)
                        maxi=right-left;
                    break;
                }
            }

            if(right-left>maxi)
                maxi=right-left;          
            while(left<=right&&dup==1)//如果是有重复的,要从左边去重
            {
                if(arr[left]==arr[right])
                {
                    dup = 0;
                }
                st.erase(arr[left]);
                left++;
            }
        }

        return maxi;

    }
};

全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务