只能操作长度不超过(n)的区间。
对(1)和(n)所在的位置进行讨论:
- 若数组已经有序,则答案为(0)
- 若(a[1]=1),只需选择([2,n])进行一次重排即可。同理,若(a[n]=n),只需选择([1,n-1])进行一次重排即可。
- 若(a[1]=n)且(a[n]=1),则首先选择([1,n-1])进行一次重排(让(n)放在([2,n-1])中),再选择([2,n])进行一次重排(让(n)归位,并让(1)放在([2,n-1])中),最后选择([1,n-1])让(1)归位,并排列好([2,n-1])。
- 其他情况,对([1,n-1])和([2,n])分别操作一次即可让所有元素归位。
int n;
int main() {
int T;
cin >> T;
while(T--) {
cin >> n;
vector<int> a(n);
for(int &x : a)
cin >> x;
int ans = 2;
if(is_sorted(a.begin(), a.end()))
ans = 0;
else if(a[0] == 1 || a[n - 1] == n)
ans = 1;
else if(a[0] == n && a[n - 1] == 1)
ans = 3;
cout << ans << endl;
}
//system("pause");
return 0;
}