for(int i =0, j =0; i < n; i ++){while(j < i &&check(i, j)) j ++;// 具体问题的逻辑}
例题1
#include<iostream>#defineintlonglong
using namespace std;signedmain(){int n;
cin >> n;for(int i =1; i <= n /2; i++){int sum = i;int j = i;while(sum < n){
j++;
sum += j;}if(sum == n)
cout << i <<' '<< j<<endl;}return0;}
例题2
#include<iostream>
using namespace std;int a[100005], b[110];intmain(){int n;
cin >> n;for(int i =1; i <= n; i++){
cin >> a[i];}int maxn =0;for(int i =1,j =1; i <= n; i++){
b[a[i]]++;//不能放在上面的for循环中while(b[a[i]]>1){
b[a[j]]--;
j++;}
maxn =max(maxn, i - j +1);}
cout << maxn;return0;}
例题3
#include<iostream>
using namespace std;int a[100005], b[100005];intmain(){int n, m;
cin >> n >> m;for(int i =1; i <= n; i++)
cin >> a[i];for(int i =1; i <= m; i++)
cin >> b[i];for(int i =1,j=1; i <= n; i++){while(a[i]!= b[j]){
j++;}if(j > m){
cout <<"No";return0;}}
cout <<"Yes";return0;}