递归实现煎饼排序
Posted z-d-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归实现煎饼排序相关的知识,希望对你有一定的参考价值。
给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序。我们要执行零次或多次煎饼翻转(按顺序一次接一次地进行)以完成对数组 A 的排序。
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 }
以上是关于递归实现煎饼排序的主要内容,如果未能解决你的问题,请参考以下文章