双指针算法_最长连续不重复子列长度

给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。

输入格式

第一行包含整数n。

第二行包含n个整数(均在0~100000范围内),表示整数序列。

输出格式

共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。

数据范围

1n1000001≤n≤100000

输入样例:

5
1 2 2 3 5

输出样例:

3
 
ijij
1
j s[j]--j
 
#include <iostream>//
 
using namespace std;//
 
const int N = 100010;//
 
int n;
int q[N], s[N];//q,s[i]以q[i]
 
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]] ++ ;//放q[i]
  while (j < i && s[q[i]] > 1) s[q[j ++ ]] -- ;//
  res = max(res, i - j + 1);
}
 
  cout << res << endl;
 
  return 0;
}
 
posted @ 2020-08-30 13:50  WAsbry  阅读(171)  评论(0编辑  收藏  举报