这道题没有什么难点,有一点思维量,题目告诉说,每次把数组第一个元素移到最后,然后再让它向前移动,直到它绝对大于它前面的值就停止,侧面说明了,当数组头为最小元素的时候,数组无论如何也无法再改变了,那么操作的次数就是最小元素前面的元素个数。

然后需要判断,是否可以完成排序,因为最小元素作为数组头的时候,数组就无法再排序了,那么未排序之前的在最小元素后面的元素是无序的话,那么到了最后依旧无序。输出-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;
}