-
发表于 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 题目链接
-