面对需要两重循环的问题,如果可以发现其中的某些单调性,使得一个指针移动的过程中,另一个指针只能单调的朝某个方向移动,这就可以称作双指针算法
1 //最长不连续子序列问题 2 #include<iostream> 3 using namespace std; 4 const int N=100010; 5 int n; 6 int q[N]; 7 int s[N]; 8 int main(void){ 9 cin>>n; 10 for(int i=0;i<n;i++){ 11 cin>>q[i]; 12 } 13 int res=0; 14 for(int i=0,j=0;i<n;i++){ 15 s[q[i]]++; 16 while(s[q[i]]>1){ 17 s[q[j]]--; 18 j++; 19 } 20 res=max(res,i-j+1); 21 } 22 cout<<res; 23 return 0; 24 }