799. 最长连续不重复子序列(双指针)
2023-04-18 15:38:37 时间
https://www.acwing.com/problem/content/description/801/
简单双指针,首先考虑暴力做法:
先枚举i为终点,再枚举j为起点,判断是否合乎题意,合乎题意就更新答案
再考虑优化,此题显然i与j具有单调性,i,j都只能往后走,无法回头,因此可以用双指针优化
使用s数组判重,i右移就添加一个树,若找到重复的数,则重复的数的值必定是新加入的a[i]
j不断的右移,右移则删除一个a[j]的个数,直到删到区间内不存在新加入的a[i]的值,说明区间内不重复了
再更新答案
//暴力
for(int i=n;i>=0;i--)
for(int j=0;j<=i;j++)
{
while(j<=i && check(i,j))j++;
//更新res
}
#include<iostream>
using namespace std;
const int N = 1e5+10;
int a[N],s[N],n;
int res;
int main()
{
cin >> n;
for(int i=0;i<n;i++)cin >> a[i];
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;
}
相关文章
- 微软 Edge Dev 浏览器 97 发布:改进 PDF 和密码管理
- Windows 11上清除TPM之后还能使用吗?实测来了:影响不大
- 新系统仍不够完美!盘点Windows 11的不尽人意之处
- 通过这11个技巧,打造个性化十足的Windows 11,界面更好看
- Windows 10系统繁体字输入法怎么设置?Windows 10输入法设置方法
- 系统已过期 微软明年起停止Windows7/8/8.1的OneDrive个人版服务
- Linux 系统僵尸进程详解
- 你要的Windows:精简+ CPU占用率暴降!瞬间干掉LTSC
- 如何判断你的PC是否可以运行Windows 11?
- Windows 10系统,安装失败进不了系统怎么办?Windows 10安装失败解决方法
- Windows11 第三方 Files v2 标签式文件管理器更新:可设置为默认文件资源管理器
- 构建基础包的基础知识
- 微软 Edge 浏览器新增“Citations”功能,论文引用文献更方便
- Wms 启动流程分析和介绍
- 发布半年后:Windows 10 21H1正式版开始面向全体用户推送
- Windows 10系统截图快捷键详细介绍
- 如何更改Windows 11上的默认程序
- 吐司盒子?芝士码?HarmonyOS创新音视频测试技术来啦
- 十二个在终端运行的有趣的 Linux 命令
- 在Windows 11上访问任务管理器的四种方法