用 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]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

