JZX轻语:简

LeetCode 950 - 按递增顺序显示卡牌

发表于2024年05月28日

#队列 #模拟

该题目正向构造比较困难,可以考虑逆向思考,模拟分析结果数组中按照题目要求的那样弹出的下标顺序(0,2,4,...)(首先弹出第0个,然后第1个放在后面,弹出第2个,第3个放在后面,…),然后将牌从小到大依次填入到这些下标即可。我们可以使用队列先维护下标(0..deck.length-1),计算按题目要求弹出的下标顺序,然后对牌进行排序,按这些下标顺序构造结果即可。

class Solution:
    def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
        def get_pos(n: int):
            # 根据牌的数量n,生成按题目要求弹出的下标顺序
            q = deque(range(n))
            while q:
                yield q.popleft()
                if q:
                    q.append(q.popleft())

        pos_getter = get_pos(len(deck))
        for card in sorted(deck):  # 对牌进行排序,并按下标顺序填入
            deck[next(pos_getter)] = card
        return deck

闪念标签:LC

题目链接:https://leetcode.cn/problems/reveal-cards-in-increasing-order/