【问题描述】
对于一个具有 n 个元素的数组,如果可以将其分为两个部分,它的各个部分都是一个非严格有序数组,则我们称这样的数组为近序数组,例如
数组 1、2、3、4、4、3、2、1是近序数组,数组 4、2、1、2、3、4也是近序数组,而1、5、7、3、9、3就不是近序数组,数组1、3、3、4是有序数组,是近序数组的特例。
【输入形式】
输入的第一行为一个整数n,表示数组的元素个数。
接下来的一行,表示数组的元素。
【输出形式】
如果给定的数组是近序数组输出Yes,否则输出No。
【样例输入1】
8 1 2 3 4 4 3 2 1
【样例输出1】
Yes
【样例输入2】
4 3 4 3 4
【样例输出2】
Yes
【样例输入3】
5 3 4 3 4 3
【样例输出3】
No
#include <iostream>
using namespace std;
int main(){
int t;
cin>>t;
int num[t];
for (int i=0;i<t;i++){
cin>>num[i];
}
int flag=0;
for (int i=1;i<t-1;i++){
if ((num[i]-num[i-1])*(num[i+1]-num[i])>=0){ //主要是去判断单调性的增减,如果这个
flag=flag; 被判断到了,i+1,不然会重复判断
}
else{
flag+=1;
i+=1;
}
}
if (flag>1){
cout<<"No";
}
else{
cout<<"Yes";
}
}