【每日算法】基础算法——双指针算法[最长连续不重复子序列](十五)

题目内容

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

输入格式

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

输出格式

共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。

数据范围

1≤n≤100000

输入样例

5
1 2 2 3 5

输出样例

3

题解

双指针算法是经常会在面试笔试中考的算法,是目前必须要准备好的算法之一。

在本题中,由于求解的是最长连续不重复子序列,因此,指针i和指针j的作用就是利用i和j移动,求出在i和j之间最大的不重复元素之间的距离,对i进行从0到n的迭代,j根据i进行迭代,求max_length。

代码

#include <iostream>

using namespace std;

const int N = 100010;
int n;
int a[N],s[N];

int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];

int res = 0;
for (int i = 0,j = 0; i< n; i++){
s[a[i]]++;
while(s[a[i]] > 1){
s[a[j]] -- ;
j ++;
}
res = max(res,i-j+1);
}
cout << res << endl;
return 0;
}

原题链接

Author: Frederic Niu
Link: https://www.fredericniu.cn/2020/11/25/【每日算法】基础算法——双指针算法-最长连续不重复子序列-(十五)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号