若数组的一个片段,进行了反转,反转时候是一个升序序列,那么称是一个反转数组
思想:可以将数组赋值到另外一个数组中,对其升序排列
对原数组使用二分查找的思想进行扫描,当扫描出来的值跟排序后的值不同是,中断扫描
代码:
package test; import java.util.Arrays; import java.util.Scanner; //美团数组翻越 //若数组中存在片段反转后是一个有组数组,那么称是一个反转数组 public class REVER { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); int[] ori = new int[num]; for(int i = 0;i<num;i++){ ori[i] = scanner.nextInt(); } int[] copy = Arrays.copyOf(ori,ori.length); Arrays.sort(copy); int start = 0; int end = num-1; while (start<=end && copy[start] == ori[start])start++; while (end>=0 && copy[end] == ori[end])end--; int i = 0; for(;i<=end-start;i++){ if(copy[start+i] != ori[end-i]) break; } if(i>end-start){ System.out.println("yes"); }else{ System.out.println("no"); } } }