AcWing - 最长连续不重复子序列(双指针)
发布日期:2021-07-01 00:21:52 浏览次数:2 分类:技术文章

本文共 845 字,大约阅读时间需要 2 分钟。

题目链接:

时/空限制:1s / 64MB

题目描述

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

输入格式

第一行包含整数n。

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

输出格式

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

数据范围

1≤n≤100000

输入样例

5

1 2 2 3 5

输出样例

3

解题思路

题意:求出最长的不包含重复数字的连续区间的长度。

思路:我们可以利用双指针法,令l为慢指针,r为快指针,如果快指针的元素出现过,那么就将慢指针往前走,并消除标记,直到把和快指针的元素相等的那个标记去掉。快指针每次往前走的是标记,慢指针走是取消标记,每次更新最大值就行了。

Accepted Code:

/*  * @Author: lzyws739307453  * @Language: C++  */#include 
using namespace std;const int MAXN = 100005;bool vis[MAXN];int spt[MAXN];int main() { int n, max_ = 0; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &spt[i]); for (int r = 0, l = 0; r < n; r++) { while (vis[spt[r]] && l <= r) { vis[spt[l]] = false; l++; } vis[spt[r]] = true; max_ = max(r - l + 1, max_); } printf("%d\n", max_); return 0;}

转载地址:https://lzyws739307453.blog.csdn.net/article/details/99866029 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:AcWing - 数组元素的目标和(双指针)
下一篇:AcWing - 二进制中1的个数(位运算)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月30日 18时02分10秒