美文网首页
LeetCode 第969题:煎饼排序

LeetCode 第969题:煎饼排序

作者: 放开那个BUG | 来源:发表于2021-03-15 22:39 被阅读0次

    1、前言

    image.png

    2、思路

    每次将最大的放到底部,然后递归前 n - 1 个继续执行此操作。

    3、代码

    class Solution {
        // 记录反转操作序列
        LinkedList<Integer> res = new LinkedList<>();
    
        List<Integer> pancakeSort(int[] cakes) {
            sort(cakes, cakes.length);
            return res;
        }
    
        void sort(int[] cakes, int n) {
            // base case
            if (n == 1) return;
    
            // 寻找最大饼的索引
            int maxCake = 0;
            int maxCakeIndex = 0;
            for (int i = 0; i < n; i++)
                if (cakes[i] > maxCake) {
                    maxCakeIndex = i;
                    maxCake = cakes[i];
                }
    
            // 第一次翻转,将最大饼翻到最上面
            reverse(cakes, 0, maxCakeIndex);
            res.add(maxCakeIndex + 1);
            // 第二次翻转,将最大饼翻到最下面
            reverse(cakes, 0, n - 1);
            res.add(n);
    
            // 递归调用
            sort(cakes, n - 1);
        }
    
        void reverse(int[] arr, int i, int j) {
            while (i < j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                i++; j--;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第969题:煎饼排序

          本文链接:https://www.haomeiwen.com/subject/twzwiktx.html