leetcode - 950. Reveal Cards In Increasing Order

Description

You are given an integer array deck. There is a deck of cards where every card has a unique integer. The integer on the ith card is deck[i].

You can order the deck in any order you want. Initially, all the cards start face down (unrevealed) in one deck.

You will do the following steps repeatedly until all cards are revealed:

  1. Take the top card of the deck, reveal it, and take it out of the deck.
  2. If there are still cards in the deck then put the next top card of the deck at the bottom of the deck.
  3. If there are still unrevealed cards, go back to step 1. Otherwise, stop.

Return an ordering of the deck that would reveal the cards in increasing order.

Note that the first entry in the answer is considered to be the top of the deck.

Example 1:

复制代码
Input: deck = [17,13,11,2,3,5,7]
Output: [2,13,3,11,5,17,7]
Explanation: 
We get the deck in the order [17,13,11,2,3,5,7] (this order does not matter), and reorder it.
After reordering, the deck starts as [2,13,3,11,5,17,7], where 2 is the top of the deck.
We reveal 2, and move 13 to the bottom.  The deck is now [3,11,5,17,7,13].
We reveal 3, and move 11 to the bottom.  The deck is now [5,17,7,13,11].
We reveal 5, and move 17 to the bottom.  The deck is now [7,13,11,17].
We reveal 7, and move 13 to the bottom.  The deck is now [11,17,13].
We reveal 11, and move 17 to the bottom.  The deck is now [13,17].
We reveal 13, and move 17 to the bottom.  The deck is now [17].
We reveal 17.
Since all the cards revealed are in increasing order, the answer is correct.

Example 2:

复制代码
Input: deck = [1,1000]
Output: [1,1000]

Constraints:

复制代码
1 <= deck.length <= 1000
1 <= deck[i] <= 10^6
All the values of deck are unique.

Solution

Solved after help.

Use a queue to simulate. Sort the deck first, and then initialize a queue with the indexes, then pop from the queue, that will be the index of the smallest element. Then pop the second index, and append it into the end of the queue. Then pop again, repeat this process until the index queue only has 1 index.

Time complexity: o ( n ) o(n) o(n)

Space complexity: o ( n ) o(n) o(n)

Code

python3 复制代码
class Solution:
    def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
        res = [0] * len(deck)
        deck.sort()
        queue = collections.deque(range(len(deck)))
        i = 0
        while len(queue) > 1:
            cur_index = queue.popleft()
            res[cur_index] = deck[i]
            i += 1
            queue.append(queue.popleft())
        res[queue[0]] = deck[i]
        return res
相关推荐
长安er7 小时前
LeetCode215/347/295 堆相关理论与题目
java·数据结构·算法·leetcode·
元亓亓亓7 小时前
LeetCode热题100--62. 不同路径--中等
算法·leetcode·职场和发展
小白菜又菜7 小时前
Leetcode 1925. Count Square Sum Triples
算法·leetcode
登山人在路上8 小时前
Nginx三种会话保持算法对比
算法·哈希算法·散列表
写代码的小球9 小时前
C++计算器(学生版)
c++·算法
AI科技星9 小时前
张祥前统一场论宇宙大统一方程的求导验证
服务器·人工智能·科技·线性代数·算法·生活
Fuly102410 小时前
大模型剪枝(Pruning)技术简介
算法·机器学习·剪枝
Xの哲學10 小时前
Linux网卡注册流程深度解析: 从硬件探测到网络栈
linux·服务器·网络·算法·边缘计算
bubiyoushang88810 小时前
二维地质模型的表面重力值和重力异常计算
算法
仙俊红10 小时前
LeetCode322零钱兑换
算法