博客
关于我
双指针算法思想
阅读量: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/

你可能感兴趣的文章
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
查看>>
leetcode 14 最长公共前缀
查看>>
做做Java
查看>>
C++并发与多线程(一)
查看>>
java一些基本程序
查看>>
vue-依赖-点击复制
查看>>
LeetCode 116填充每个节点的下一个右侧结点指针
查看>>
2021-4-28【PTA】【L2-1 包装机 (25 分)】
查看>>
Arduino mega2560+MPU6050利用加速度值控制舵机
查看>>
紫书——蛇形填数
查看>>
A Guide to Node.js Logging
查看>>
webwxbatchgetcontact一个神奇的接口
查看>>
Edge浏览器:你的的内核我的芯
查看>>
【考研英语-基础-简单句】简单句的核心变化_谓语情态
查看>>
Jetson AGX Xavier硬件自启动
查看>>
统计字符数
查看>>
JS 数组的 every()、some() 、filter()、findIndex() 、find()、map()方法
查看>>
JS数据类型的判断
查看>>
实现一个简易Vue(三)Compiler
查看>>
仿小米商城(上)
查看>>