题解 | 最长无重复子数组

最长无重复子数组

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

class Solution 
{
    bool vis[100010] = {false}; // 标记数组,记录元素是否在当前窗口中出现过
public:
    int maxLength(vector<int>& arr) 
    {
        int left = 0, right = 0, len = 1; // 初始化左右指针和最大长度
        
        // 右指针遍历整个数组
        while(right < arr.size())
        {
            // 当右指针指向的元素已在窗口中出现,需要收缩左指针
            while(vis[arr[right]] && left <= right)
            {
                vis[arr[left]] = false; // 标记左指针指向的元素为未访问
                left++; // 左指针右移
            }

            // 更新最大长度,窗口长度为 right - left + 1
            len = max(len, right - left + 1);
            
            // 标记当前元素为已访问
            vis[arr[right]] = true; 

            // 右指针右移,扩展窗口
            right++;
        }
        
        return len; // 返回最大无重复子数组长度
    }
};

全部评论

相关推荐

07-22 11:07
门头沟学院 Java
点赞 评论 收藏
分享
写不来代码的小黑:这么小的城市能有做it的公司也不容易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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