标签:十分 div style 转换 int str names code image
双指针算法本质上就是将具有单调性的算法复杂度为O(N^2)的朴素算法通过双指针优化到O(n)的一种优化方法。是一种十分常用的算法。
设计双指针算法我们一般先写出它的朴素算法,然后按照模板:
for( int i = 0, j = 0 ; i < n ; i ++) { //check()是按照题目逻辑的判断函数 while( j <= i && check() ){ //不满足时 j ++; } //此处是按照题目逻辑的解答过程。 }
将其转换为双指针算法。
例题:最长连续不重复子序列
题解代码:
#include<iostream> using namespace std; const int N = 1000010; int n; int a[N]; int cnt[N]; int main(){ int res = 0; scanf("%d",&n); for(int i = 0 ; i < n ; i ++ ) scanf("%d",&a[i]); for(int i = 0, j = 0 ; i < n ; i ++ ){ cnt[a[i]]++; while( cnt[a[i]] > 1 ){ cnt[a[j]]--; j++; } res = max(res , i - j + 1); } printf("%d\n",res); return 0; }
标签:十分 div style 转换 int str names code image
原文地址:https://www.cnblogs.com/Flydoggie/p/12240889.html