赛码网-翻转数组
import java.util.Scanner; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //思路:对数据存放两个数组,一个存原始顺序,一个用来排序 //目的是找到一个片段,将其翻转后数组成为递增序列 while(scanner.hasNext()) { int n = scanner.nextInt(); int[] arr = new int[n]; int[] copy = new int[n]; for(int i = 0;i<n;i++) { arr[i] = scanner.nextInt(); copy[i] = arr[i]; } Arrays.sort(copy); //使用一个已经排好序的数组与原数据进行左右指针的比对,在左边/右边找到第一个不是递增的位置 int left = 0,right = n-1; while(left<n && arr[left] == copy[left]) left++; while(right>=0&&arr[right] == copy[right]) right--; int i; //right-left即为需要改变顺序才能变成升序的片段 for(i = 0;i<=right-left;i++) { //对其进行双端匹配,如果一个位置不同则直接跳出 if(copy[left+i] != arr[right-i]) break; } if(i>right-left)//证明已经对比完子数组的全部,都一致 { System.out.println("yes"); } else { System.out.println("no"); } } } }