给你n个数a1,a2,a3,…,an,现要将其排成非递减的顺序,对于当前你每次可以做如下操作
a1,a2,a3,…,an→an,a1,a2,a3,…,an−1
现在问你最少需要操作几次使得序列变成非递减。
输入格式
第一行先输入一个整数n
第二行输入n个整数
输出格式
输出一个整数,表示最少的操作次数
如果无法使得序列变成非递减,输出-1
#include<bits/stdc++.h>
using namespace std;
int n,a[100001],b[100001];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
if(n==i){
cout<<0;
return 0;
}
if(a[i]>a[i+1]){
break;
}
}
for(int i=1;i<=n;i++){
b[1]=a[n];
for(int j=2;j<=n;j++){
b[j]=a[j-1];
}
for(int j=1;j<=n;j++){
a[j]=b[j];
}
for(int j=1;j<=n;j++){
if(n==j){
cout<<i;
return 0;
}
if(a[j]>a[j+1]){
break;
}
}
}
cout<<-1;
return 0;
}