题目描述
给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入样例
5
1 2 2 3 5
输出样例
3
算法
- 开两个数组 q[N], s[N], 分别记录数组和每个数出现的次数.
- 两个指针 i 和 j , i 先前走, 然后更新 s[N] 数组, 检查是否 j < i 且 s[q[i]] 出现了 2 次, 如果出现了 两次, 说明 i 指向的数和 j 指向的数相同了, 此时让 j 指针向前走, 同时更新一下 s[N] 数组. 最后更新一下 res .
C++ 代码
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int q[N], s[N];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);
int res = 0;
for (int i = 0, j = 0; i < n; i ++ ) {
s[q[i]] ++ ;
while (j < i && s[q[i]] > 1) s[q[j ++ ]] -- ;
res = max(i - j + 1, res);
}
printf("%d\n", res);
return 0;
}
兄弟你没有填邀请码可以填一个,都可以得AC币!嘿嘿,谢谢兄弟
我的邀请码是:GUDFH
不用啦 谢谢