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