题目描述
小Q在学习许多排序算法之后灵机一动决定自己发明一种排序算法,小Q希望能将n个不同的数排序为升序。小Q发明的排序算法在每轮允许两种操作:
1、 将当前序列中前n-1个数排为升序
2、 将当前序列中后n-1个数排为升序
小Q可以任意次使用上述两种操作,小Q现在想考考你最少需要几次上述操作可以让序列变为升序。
输入描述:
输入包括两行,第一行包括一个正整数n(3≤n≤10^5),表示数字的个数 第二行包括n个正整数a[i](1≤a[i]≤10^9),即需要排序的数字,保证数字各不相同。
输出描述:
输出一个正整数,表示最少需要的操作次数
示例1
输入
复制
6 4 3 1 6 2 5
输出
复制
2
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;int Result;
scanf("%d",&n);
vector<int> Input(n);
for(int i = 0;i < n;i ++){
int tmp;
cin >> tmp;
Input[i] = tmp;
}
int Max = Input[0];
int Min = Input[0];
bool isSorted = false;
for(int i = 1;i < n;i ++){
if(Max < Input[i]){
Max = Input[i];
}
if(Min > Input[i]){
Min = Input[i];
}
if(Input[i] < Input[i - 1]){
isSorted = true;
}
}
if(Min == Input[0] && Max == Input[n - 1]){
if(isSorted){Result = 0;}
else{Result = 1;}
}
else if(Min == Input[0] || Max == Input[n - 1]){
Result = 1;
}
else{
if(Min == Input[n - 1] && Max == Input[0]){
Result = 3;
}
else{
Result = 2;
}
}
cout << Result <<endl;
return 0;
}
标签:规律,Min,int,Max,Result,升序,Input From: https://blog.51cto.com/u_13121994/5798301