LeetCode Python 969 煎餅排序

2021-09-11 03:22:04 字數 2428 閱讀 3877

給定陣列a,我們可以對其進行煎餅翻**我們選擇一些正整數k<= a.length,然後反轉a的前k個元素的順序。我們要執行零次或多次煎餅翻轉(按順序一次接一次地進行)以完成對陣列a的排序。

返回能使a排序的煎餅翻轉操作所對應的 k 值序列。任何將陣列排序且翻轉次數在10 * a.length範圍內的有效答案都將被判斷為正確。

示例 1:

輸入:[3,2,4,1]輸出:[4,2,4,3]解釋:我們執行 4 次煎餅翻轉,k 值分別為 4,2,4,和 3。

初始狀態 a = [3, 2, 4, 1]

第一次翻轉後 (k=4): a = [1, 4, 2, 3]

第二次翻轉後 (k=2): a = [4, 1, 2, 3]

第三次翻轉後 (k=4): a = [3, 2, 1, 4]

第四次翻轉後 (k=3): a = [1, 2, 3, 4],此時已完成排序。

示例 2:

輸入:[1,2,3]輸出:解釋:輸入已經排序,因此不需要翻轉任何內容。

請注意,其他可能的答案,如[3,3],也將被接受。

1 <= a.length <= 100a[i][1, 2, ..., a.length]的排列

思路:按照題意,每次操作只能翻轉前k個元素,所以得出結論排序應該先從最末尾排起,不然排好的順序就會被接下來的翻轉操作所打亂,因此我們每次都應該先把未排序陣列裡的最大元素放到未排序陣列的最末尾,

比如 [1,4,2,3]這個陣列,首先就應該想辦法把4放到最後,

直接一步翻轉放到最後顯然不可行,那就倒著想,怎麼假設已經放好了[x,x,x,4],它的上一步應該是什麼,

根據翻轉的規則不難得出,上一步應該就是[4,x,x,x]

因此可以總結出翻轉的規則:

1. 每次都要處理未排序陣列裡的最大元素

2. 先把這個最大元素翻轉到未排序陣列的頭部 (k = 最大元素的下標 + 1 )

3. 再翻轉整個未排序陣列(定義乙個變數num代表已經排好的元素個數, k = 元素總數-num),就可以使得這個最大元素排好位置

4. 把兩次翻轉的k依次加入到res中去(這種翻轉規則的翻轉總數最多為陣列長度的兩倍,滿足題目要求 <10 * a.length

舉例[1, 4 , 2, 3]的操作步驟:

[1,4,2,3] -----------------> [4,1,2,3] ----------------> [3,2,1,4]

[3,2,1,4] -----------------> [1,2,3,4](排序已完成)

class solution(object):

def pancakesort(self, a):

""":type a: list[int]

:rtype: list[int]

"""l = len(a)

num = 0

res =

while(num < l - 1):

maxe = max(a)

index = a.index(maxe)

if index != l - num -1:

b = a[:index + 1][::-1] + a[index + 1:]

a = b[::-1][:-1]

else:

a = a[:-1]

num += 1

return res

class solution(object):

def pancakesort(self, a):

""":type a: list[int]

:rtype: list[int]

"""l = len(a)

num = 0

res =

while(num < l - 1):

maxe = max(a)

index = a.index(maxe)

if index != l - num -1:

a[:index + 1] = a[:index + 1][::-1]

a[:l - num] = a[:l - num][::-1]

a = a[:-1]

num += 1

return res

LeetCode Python刷題 9 回文數

leetcode 9.回文數 題目 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例1 輸入 121 輸出 true 示例2 輸入 121 輸出 false 示例3 輸入 10 輸出 false def ispalindrome x falseflag 0...

LeetCode Python 打家劫舍I

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...

leetcode Python編碼練習

貪心演算法 1.環形路上有n個加油站,第i個加油站的汽油量是gas i 你有一輛車,車的油箱可以無限裝汽油。從加油站i走到下乙個加油站 i 1 花費的油量是cost i 你從乙個加油站出發,剛開始 的時候油箱裡面沒有汽油。求從哪個加油站出發可以在環形路上走一圈。返回加油站的下標,如果沒有答案的話返回...