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; // 返回最大无重复子数组长度
}
};

京公网安备 11010502036488号