AcWing 799. 最长连续不重复子序列
原题链接
简单
#include<iostream>
using namespace std;
const int N = 100010; // 定义常量 N,用于数组的最大长度
int n; // n 表示数组的长度
int a[N], s[N]; // a 用于存储输入的数组,s 用于记录每个元素出现的次数
int main() {
cin >> n; // 读取数组的长度 n
for (int i = 0; i < n; i++) cin >> a[i]; // 读取数组的元素
int res = 0; // res 用于存储最长无重复子数组的长度
for (int i = 0, j = 0; i < n; i++) { // 双指针 i 和 j,用于维护滑动窗口
s[a[i]]++; // 将当前元素 a[i] 的出现次数加 1
while (s[a[i]] > 1) { // 如果当前元素 a[i] 的出现次数大于 1,说明有重复
s[a[j]]--; // 将左指针 j 指向的元素的出现次数减 1
j++; // 将左指针 j 右移
}
res = max(res, i - j + 1); // 更新最长无重复子数组的长度
}
cout << res << endl; // 输出结果
return 0; // 返回 0,表示程序成功结束
}