按遞增順序顯示卡牌
- 題目要求
-
- 我的解題思路
- 我的思路缺點
題目要求
牌組中的每張卡牌都對應有一個唯一的整數。你可以按你想要的順序對這套卡片進行排序。
最初,這些卡牌在牌組裡是正面朝下的(即,未顯示狀态)。
現在,重複執行以下步驟,直到顯示所有卡牌為止:
從牌組頂部抽一張牌,顯示它,然後将其從牌組中移出。
如果牌組中仍有牌,則将下一張處于牌組頂部的牌放在牌組的底部。
如果仍有未顯示的牌,那麼傳回步驟 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%的使用者