这道题没有什么难点,有一点思维量,题目告诉说,每次把数组第一个元素移到最后,然后再让它向前移动,直到它绝对大于它前面的值就停止,侧面说明了,当数组头为最小元素的时候,数组无论如何也无法再改变了,那么操作的次数就是最小元素前面的元素个数。
然后需要判断,是否可以完成排序,因为最小元素作为数组头的时候,数组就无法再排序了,那么未排序之前的在最小元素后面的元素是无序的话,那么到了最后依旧无序。输出-1
#include<bits/stdc++.h>
using namespace std;
const int M=2e5+5;
typedef long long ll;
ll a[M];
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
ll minn=1e18;
int pos=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(minn>a[i]){
pos=i;
minn=a[i];
}
}
int f=0;
for(int i=pos+1;i<n;i++){
if(a[i]>a[i+1]){
cout<<"-1"<<endl;
f=1;
break;
}
}
if(f==1) continue;
else cout<<pos-1<<endl;
}
return 0;
}