比赛的时候写了好长时间,而且是很乱很复杂的一大串…真的好有挫败感而且丢撵。。觉得这么简单的题目应该很快就能写完而且写得很简洁的才对 :(
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int n,a[1005],l,r,flag=1;
int main () {
cin>>n;
for (int i=1;i<=n;i++) {
cin>>a[i];
}
r=n; // 初始化右边界,防止输入的数据本身就是降序例如 4 3 2 1
for (int i=1;i<=n;i++) {
if (a[i]!=i&&flag) {
l=i;
for (int j=i+1;j<=n;j++) { // 找右边界
if (a[j+1]>a[j]||a[j+1]==0) {
r=j;
flag=0;
break;
}
}
i=r;
}
else if (a[i]!=i&&!flag){
cout<<"0 0"<<endl; // 出现了多个左边界,直接返回0 0
return 0;
}
}
if(flag==1) r=0; // 没找到右边界,说明本来就是升序例如 1 2 3 4
cout<<l<<" "<<r<<endl;
return 0;
}