博客
关于我
双指针算法思想
阅读量:370 次
发布时间:2019-03-05

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

最长不重复连续子序列问题

双指针算法是一种优化方法,可以将暴力枚举的时间复杂度从O(n²)降低到O(n)。这种方法的核心思想是通过巧妙地利用题目特定的逻辑关系来减少计算量。

以下是双指针算法的通用模板:

for(int i=0, j=0; i < n; i++) {    while(j < n && a[j] == a[i]) {        j++;    }    int len = i - j + 1;    if(len > max_len) {        max_len = len;    }}

在这个算法中,i指针用于遍历数组中的每一个元素,j指针用于跟踪当前窗口的起始位置。当遇到重复的元素时,j指针会向前移动,确保窗口内的元素都是唯一的。这样,每个元素最多只会被访问一次,从而将时间复杂度降低到O(n)。

以下是具体实现代码:

#include 
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++) { while(j < n && a[j] == a[i]) { j++; } int len = i - j + 1; if(len > res) { res = len; } } printf("%d", res); return 0;}

这个代码通过维护一个滑动窗口,确保窗口内的元素都是唯一的,从而高效地解决了最长不重复连续子序列问题。这种方法不仅时间复杂度优异,还非常容易理解和实现。

转载地址:http://ohfwz.baihongyu.com/

你可能感兴趣的文章
使用springMVC配置视图管理器后找不到指定的页面
查看>>
关于js中对于Promise的深入理解
查看>>
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
查看>>
十大排序算法之三:插入排序(Python)
查看>>
利用Python实现循环队列
查看>>
利用递归实现二叉树的前中后序遍历(Python)
查看>>
Python刷题输入输出
查看>>
冒泡排序又来啦(C/C++版本)
查看>>
python负数存储
查看>>
求二维数组中最大值的位置
查看>>
python中sort和sorted的区别
查看>>
vue中echart数据动态切换,一看就懂
查看>>
Python3.6爬虫记录
查看>>
搞清楚Spring Cloud架构原理的这4个点,轻松应对面试
查看>>
1月份2月份GitHub上最热门的23个Java开源项目
查看>>
maven安装
查看>>
2020第十五届全国大学生智能汽车竞赛——4X4矩阵键盘+Flash调参系统
查看>>
合并两个有序数组
查看>>
Ubuntu 环境下使用中文输入法
查看>>
小白学习Vue(?)--model选项的使用(自定义组件文本框双向绑定)
查看>>