leetcode:969. 煎饼排序
思路
- 获取数组的最大值的索引值 i,反转 0–> i 的元素,此时反转整个数组
- 迭代:除去已经排列好的元素,获取乱序元素的最大值的索引值,反转乱序数组,将此特定情况下的最大值排至末尾
# 执行用时 : 116 ms, 在所有 Python3 提交中击败了9.68%的用户
# 内存消耗 : 13.9 MB, 在所有 Python3 提交中击败了5.66%的用户
class Solution:
def pancakeSort(self, A: List[int]) -> List[int]:
# 反转乱序元素
def reverse(aArray, length):
if(len(aArray) == length):
aArray.reverse()
return aArray
elif(len(aArray) > length):
bArray = []
for i in range(length):
bArray.append(aArray.pop(0))
bArray.reverse()
while(aArray):
bArray.append(aArray.pop(0))
return bArray
# 获取乱序元素的最大值的索引值
def acquire_max(aArray, iter_count):
newArray = []
for i in range(len(aArray)-iter_count):
newArray.append(aArray[i])
return aArray.index(max(newArray))
aArray = A
tarArray = aArray.copy()
tarArray.sort()
if(tarArray == aArray):
return []
length, iter_count = len(aArray), 0
res = []
while(True):
if(aArray == tarArray):
break
maxCount = acquire_max(aArray, iter_count)
aArray = reverse(aArray, maxCount+1)
res.append(maxCount+1)
if(aArray == tarArray):
break
aArray = reverse(aArray, length)
res.append(length)
length -= 1
iter_count += 1
return res