天天看點

leetcode刷題筆記-04-按遞增順序顯示卡牌題目要求

按遞增順序顯示卡牌

  • 題目要求
    • 我的解題思路
    • 我的思路缺點

題目要求

牌組中的每張卡牌都對應有一個唯一的整數。你可以按你想要的順序對這套卡片進行排序。

最初,這些卡牌在牌組裡是正面朝下的(即,未顯示狀态)。

現在,重複執行以下步驟,直到顯示所有卡牌為止:

從牌組頂部抽一張牌,顯示它,然後将其從牌組中移出。
如果牌組中仍有牌,則将下一張處于牌組頂部的牌放在牌組的底部。
如果仍有未顯示的牌,那麼傳回步驟 1。否則,停止行動。
           

傳回能以遞增順序顯示卡牌的牌組順序。

答案中的第一張牌被認為處于牌堆頂部。

輸入:[17,13,11,2,3,5,7]

輸出:[2,13,3,11,5,17,7]

解釋:

我們得到的牌組順序為 [17,13,11,2,3,5,7](這個順序不重要),然後将其重新排序。

重新排序後,牌組以 [2,13,3,11,5,17,7] 開始,其中 2 位于牌組的頂部。

我們顯示 2,然後将 13 移到底部。牌組現在是 [3,11,5,17,7,13]。

我們顯示 3,并将 11 移到底部。牌組現在是 [5,17,7,13,11]。

我們顯示 5,然後将 17 移到底部。牌組現在是 [7,13,11,17]。

我們顯示 7,并将 13 移到底部。牌組現在是 [11,17,13]。

我們顯示 11,然後将 17 移到底部。牌組現在是 [13,17]。

我們展示 13,然後将 17 移到底部。牌組現在是 [17]。

我們顯示 17。

由于所有卡片都是按遞增順序排列顯示的,是以答案是正确的。

我的解題思路

嘗試着倒着看示例,我們有一個數組,數組中元素不重複,且按照降序排列,我們稱之為卡牌,初始值為[17,13,11,7,5,3,2],我們有另一個隊列,初始為空,我們每次将數組中未放入隊列中的最大的數插入到隊列中,然後我們把隊首元素移到隊尾,重複這個過程,直到數組中所有元素都被放入隊列中為止。

第一次,我們選17,[17]->[17]

第二次,我們選13,[17, 13]->[13, 17]

第三次,我們選11,[13, 17, 11]->[17, 11, 13]

第四次,我們選 7,[17, 11, 13, 7]->[11, 13, 7, 17]

第五次,我們選 5,[11, 13, 7, 17, 5]->[13, 7, 17, 5, 11]

第六次,我們選 3,[13, 7, 17, 5, 11, 3]->[7, 17, 5, 11, 3, 13]

第七次,我們選 2,[7, 17, 5, 11, 3, 13, 2],此時,數組中所有元素都在隊列中,過程結束。我們需要将這個隊列倒過來,于是我們便稱這樣的隊列,是按遞增順序顯示卡牌。

class Solution:
    def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
        list1 = []
        deck.sort(reverse = True)
        for ele in deck:
            list1.append(ele)
            if len(list1) == 1:
                continue
            if len(list1) == len(deck):
                break
            list1.append(list1[0])
            list1.remove(list1[0])
        list1.reverse()
        return list1
           

我的思路缺點

執行用時 :56 ms, 在所有 python3 送出中擊敗了95.28% 的使用者

記憶體消耗 :14 MB, 在所有 python3 送出中擊敗了5.81%的使用者