算法基础课:双指针算法
发布日期:2022-02-28 07:22:42 浏览次数:24 分类:技术文章

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

首先对于双指针算法,必须明确,对于此问题来说,只能是一个优化问题,核心思想是把一个O(n2)的时间复杂度问题给优化到O(N)来解决。

通用模板:

按照朴素算法:for(int i=0;i

具体题目举例:

给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。
输入格式
第一行包含整数n。
第二行包含n个整数(均在0~100000范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。
分析:
常常利用单调性来解决此类问题:
首先设一个I,J,其中i是正常从前向后枚举,然后对于J来说应该是I,J之间的最大距离(不重复)所以可以得到,对于每次I往后移动,看看J是否移动,然后再更新答案。
代码:

#include
#include
using namespace std;const int max1=100010;int a[max1];int s[max1];int main(){
int n;cin>>n;int res=0;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1,j=1;i<=n;i++){
s[a[i]]++;while(j
1){
s[a[j]]--;j++;}res=max(res,i-j+1);```

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

上一篇:算法基础课:高精度
下一篇:算法基础课:线性结构

发表评论

最新留言

不错!
[***.144.177.141]2024年05月03日 10时54分30秒