Java教程

算法学习之路 双指针算法

本文主要是介绍算法学习之路 双指针算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/* 双指针算法可以解决像最长不重复子序列一样的问题 思路:先暴力想思路判断check()的条件,再将n^2利用模板优化为n的双指针算法; 总思路模板:       for(int i = 1,j = 1;i < n;i++)     {         while(j < i && check())         {             j++;             s[a[i]]--;         }         res = max(res , i - j + 1);     } */ //处理最长不重复子序列的双指针算法   #include<bits/stdc++.h> using namespace std; const int N = 10010; int a[N]; int b[N];//注意标记数组的类型要与数组保持一致; int main() {     int n;     cin>>n; //数组长度为n     for(int i = 0;i < n;i++)     {         cin>>a[i];     }     int res  = 0;     for(int i = 0,j = 0;i < n;i++)     {         b[a[i]]++;         while(j < i && b[a[i]] > 1)         {             b[a[j]]--;             j++;         }         res = max(res , i - j + 1);     }     cout<<res;     system("pause");     return 0; }
这篇关于算法学习之路 双指针算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!