950.按递增顺序显示卡牌

按递增顺序显示卡牌

牌组中的每张卡牌都有对应的整数。如果牌组中有 n 张卡牌,那么其中 0 到 n-1 的每张牌恰好有一张。

你可以任意顺序排列这个牌组。最初,所有卡牌都是面朝下(未揭开的),排成一堆。我们执行以下操作,直到所有卡牌都被揭开:

  • 从牌组顶部拿出第一张卡牌,将其揭开,并把它从牌组中取出
  • 如果牌组中还有卡牌,则将下一张卡牌移动到牌组底部
  • 返回牌组应当被重新排列成的顺序,使得按上述操作顺序被揭开的卡牌是递增的

示例 1:

输入:[17,13,11,2,3,5,7]
输出:[2,13,3,11,5,17,7]

提示:

  • 1 <= deck.length <= 1000
  • deck[i] 位于 [0, deck.length - 1] 范围内
  • deck 中所有值都不重复

解析

模拟操作过程,用队列记录卡牌应该放置的位置,先排序,然后逆向操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var deckRevealedIncreasing = function (deck) {
deck.sort((a, b) => a - b);
const queue = [];

for (let i = deck.length - 1; i >= 0; i--) {
if (queue.length) {
const last = queue.pop();
queue.unshift(last);
}
queue.unshift(deck[i]);
}

return queue;
};

时间复杂度 O(n log n),空间复杂度 O(n)。


950.按递增顺序显示卡牌
https://leetcode.lz5z.com/950.reveal-cards-in-increasing-order/
作者
tickli
发布于
2025年3月18日
许可协议