返回
只有过程,只有坚持,才能一步步走向目标!煎饼排序,离成功越来越近!
前端
2023-09-03 03:59:39
题目概述
LeetCode 969. 煎饼排序给定一个整数数组arr,请使用煎饼翻转完成对数组的排序。
一次煎饼翻转的执行过程如下:
- 选择一个整数k,1 <= k <= arr.length
- 反转子数组arr[1, k]
煎饼排序算法的核心思想是:通过反复地将煎饼从底部翻转到顶部,将最大的煎饼移到最顶端,然后依次将次大的煎饼移到次顶端,以此类推,最终将整个煎饼栈排序。
煎饼排序算法的实现步骤
- 从数组arr的末尾开始遍历,找到最大值max_index
- 如果max_index != arr.length - 1,则进行以下操作:
- 将子数组arr[1, max_index]反转
- 将子数组arr[1, arr.length - 1]反转
- 将arr[arr.length - 1]从数组中移除
- 重复步骤1-3,直到arr只剩下一个元素
煎饼排序算法的时间复杂度和空间复杂度
时间复杂度
煎饼排序算法的时间复杂度为O(n^2)。
这是因为,在最坏的情况下,煎饼排序算法需要对数组进行n次翻转,每次翻转都需要O(n)的时间。因此,煎饼排序算法的时间复杂度为O(n^2)。
空间复杂度
煎饼排序算法的空间复杂度为O(1)。
这是因为,煎饼排序算法不需要额外的空间来存储数据。它只需要使用原数组arr来进行排序。因此,煎饼排序算法的空间复杂度为O(1)。
LeetCode 969题的详细题解和示例代码
def pancakeSort(arr):
"""
:type arr: List[int]
:rtype: List[int]
"""
result = []
for i in range(len(arr) - 1, 0, -1):
max_index = 0
for j in range(1, i + 1):
if arr[j] > arr[max_index]:
max_index = j
if max_index != i:
result.append(max_index + 1)
arr[:max_index + 1] = arr[:max_index + 1][::-1]
result.append(i + 1)
arr[:i + 1] = arr[:i + 1][::-1]
return result
arr = [3, 2, 4, 1]
print(pancakeSort(arr))
输出结果:
[4, 2, 4, 3, 1]
结语
煎饼排序算法是一种简单易懂、空间复杂度低、时间复杂度为O(n^2)的排序算法。它特别适合对小规模的数据进行排序。如果您正在寻找一种简单易用的排序算法,那么煎饼排序算法是一个不错的选择。