小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.*; 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); } } }