969. 煎饼排序

exiaohu 于 2022-02-19 发布

题目链接:969. 煎饼排序

类似选择排序法,每一步找到序列中最大的元素,将其放在序列末尾:

递归地进行上述操作,每一步完成后,序列的末尾就会增加一个排好序的元素,直到所有的元素都排序完成。

使用这种方法,最坏情况下,需要进行队列长度的两倍的煎饼翻转数量。

from typing import List


class Solution:
    def pancake(self, arr: List[int], k: int):
        arr[:k] = arr[:k][::-1]

    def pancakeSort(self, arr: List[int]) -> List[int]:
        n = len(arr)
        if n <= 1:
            return []

        pos = arr.index(n)
        if pos == 0:
            self.pancake(arr, n)
            return [n] + self.pancakeSort(arr[:-1])
        elif pos == n - 1:
            return self.pancakeSort(arr[:-1])
        else:
            self.pancake(arr, pos + 1)
            self.pancake(arr, n)
            return [pos + 1, n] + self.pancakeSort(arr[:-1])