题解 | 最长无重复子数组

最长无重复子数组

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-21 13:38
8月实习会变多吗现在还没找到实习该怎么办...回复的hr好少
码农索隆:3-4月就要开始找,基本上6月份就发offer,7月初已经开始暑期实习了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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