用 Python 编写程序排列卡片,使其按升序显示

pythonserver side programmingprogramming更新于 2026/1/9 3:24:17

假设我们有一个卡片列表,我们想以某种方式排列卡片,使它们按升序显示。众所周知,卡片以这种方式显示: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 中的每个元素 card,执行
    • 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]

相关文章


有用资源