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]

更新於:2020年10月5日

402 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始學習
廣告