1 /*
2 * https://leetcode-cn.com/problems/pancake-sorting/
3 *
4 * 给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序。
5 * 我们要执行零次或多次煎饼翻转(按顺序一次接一次地进行)以完成对数组 A 的排序。
6 * 返回能使 A 排序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在 10 * A.length 范围内的有效答案都将被判断为正确。
7 */
8 import java.util.ArrayList;
9 import java.util.List;
10
11 public class code969_PancakeSorting
12 {
13 List<Integer> res = new ArrayList<>();
14 public List<Integer> pancakeSort(int[] A) {
15 sort(A, A.length);
16 System.out.println(res);
17 return res;
18 }
19 public void sort(int[] nums, int n){
20 if(n == 1)
21 return;
22 int maxNum = 0;
23 int maxNumIndex = 0;
24 for(int i = 0; i < n; i++){
25 if(nums[i] > maxNum){
26 maxNum = nums[i];
27 maxNumIndex = i;
28 }
29 }
30 reverse(nums, 0, maxNumIndex);
31 res.add(maxNumIndex + 1);
32 reverse(nums, 0, n - 1);
33 res.add(n);
34 sort(nums, n - 1);
35 }
36 public void reverse(int[] nums, int start, int end){
37 while(start < end){
38 int temp = nums[start];
39 nums[start++] = nums[end];
40 nums[end--] = temp;
41 }
42 }
43 public static void main(String[] args){
44 code969_PancakeSorting pancakeSorting = new code969_PancakeSorting();
45 pancakeSorting.pancakeSort(new int[]{3,2,4,1});
46 //4 2 3 1 3
47 //1 3 2 4 4
48 //3 1 2 4 2
49 //2 1 3 4 3
50 //2 1 3 4 1
51 //1 2 3 4 2
52 }
53 }