Python程式:按升序排列卡片以便揭示
假設我們有一組卡片,我們希望按升序排列這些卡片以便揭示。我們知道,卡片的揭示方式如下:1. 移去並揭示最上面的卡片,然後將下一張卡片移到背面。2. 重複步驟1,直到沒有更多卡片。我們必須找到一種卡片排列方式,以便它們能夠按升序揭示。
例如,如果輸入是cards = [1, 2, 3, 4, 5, 6, 7, 8],則輸出將是[1, 5, 2, 7, 3, 6, 4, 8],因為移去1並將5移到背面,當前情況為[2, 7, 3, 6, 4, 8, 5]。移去2並將7移到背面,當前情況為[3, 6, 4, 8, 5, 7]。移去3並將6移到背面,當前情況為[4, 8, 5, 7, 6]。移去4並將8移到背面,當前情況為[5, 7, 6, 8]。移去5並將7移到背面,當前情況為[6, 8, 7]。移去6並將8移到背面,當前情況為[7, 8]。移去7,只有一張卡片[8]。然後移去[8]
為了解決這個問題,我們將遵循以下步驟:
- 對卡片列表cards進行排序
- idx := 一個包含從0到cards長度的元素的列表
- order := 一個新列表
- q := 一個佇列,並插入idx的元素
- 當q不為空時,執行以下操作:
- 從q的左側刪除元素並將其插入order
- 如果q不為空,則:
- ans := 建立一個與cards大小相同的列表,並用0填充
- 對於order中的每個元素i和cards中的每張卡片,執行以下操作:
- ans[i] := card
- 返回ans
讓我們看下面的實現來更好地理解:
示例
from collections import deque class Solution: def solve(self, cards): cards.sort() idx=[i for i in range(len(cards))] order=[] q=deque(idx) while q: order.append(q.popleft()) if q: q.append(q.popleft()) ans=[0 for _ in cards] for i,card in zip(order,cards): ans[i]=card return ans ob = Solution() print(ob.solve([1, 2, 3, 4, 5, 6, 7, 8]))
輸入
[1, 2, 3, 4, 5, 6, 7, 8]
輸出
[1, 5, 2, 7, 3, 6, 4, 8]
廣告