小Q在学习许多排序算法之后灵机一动决定自己发明一种排序算法,小Q希望能将n个不同的数排序为升序。小Q发明的排序算法在每轮允许两种操作:
1、 将当前序列中前n-1个数排为升序
2、 将当前序列中后n-1个数排为升序
小Q可以任意次使用上述两种操作,小Q现在想考考你最少需要几次上述操作可以让序列变为升序。
小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),即需要排序的数字,保证数字各不相同。
输出一个正整数,表示最少需要的操作次数
6 4 3 1 6 2 5
2
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
private static int n;
private static int ans;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
if (in.hasNextInt()) n = in.nextInt();
int[] arr = new int[n];
int minIndex = 0, maxIndex = 0;
for (int i = 0; i < n; i ++) {
if (in.hasNextInt()) arr[i] = in.nextInt();
if (arr[minIndex] > arr[i]) minIndex = i;
if (arr[maxIndex] < arr[i]) maxIndex = i;
}
ans = 2;
if (minIndex == n-1) ans++;
if (maxIndex == 0) ans ++;
System.out.println(ans);
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int[] a = new int[n];
for(int i =0;i<n;i++){
arr[i] = sc.nextInt();
a[i] = arr[i];
}
Arrays.sort(a);
boolean b = true;
for(int i =0;i<n;i++){
if(a[i]!=arr[i]){
b = false;
break;
}
}
if(b)
System.out.println(0);
else if(a[0]==arr[0]||a[n-1]==arr[n-1]){
System.out.println(1);
}else if(a[0] == arr[n-1]&&a[n-1] == arr[0]){
System.out.println(3);
}else{
System.out.println(2);
}
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n =sc.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = sc.nextInt();
}
int[] brr = new int[n];
for(int i=0;i<n;i++){
brr[i] = arr[i];
}
Arrays.sort(brr);
if(brr[0] == arr[0]||brr[n-1] == arr[n-1]){
System.out.println(1);
}else if(brr[0] == arr[n-1]&&brr[n-1] == arr[0]){
System.out.println(3);
}else{
System.out.println(2);
}
}
}