点击进入题目
双指针,双指针,双指针题目直接用双指针!!!
思路描述
设l=1,r=n
如果l,r有一个不满足条件就不断缩减区间。
#include<bits/stdc++.h> #define int long long using namespace std; const int N=2e5+10; int a[N]; void solve() { int n;cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int l=1;int r=n; int mmin=1; int mmax=n; while(l<r) { if(a[l]==mmin) { l++; mmin++; continue; } if(a[l]==mmax) { l++; mmax--; continue; } if(a[r]==mmin) { r--; mmin++; continue; } if(a[r]==mmax) { r--; mmax--; continue; } break; } if(l>=r) cout<<-1<<endl; else cout<<l<<' '<<r<<endl; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int T=1;cin>>T; while(T--) { solve(); } return 0; }