LeetCode Problem Workspace

Reveal Cards In Increasing Order

Determine the initial deck order to reveal cards in strictly increasing order using queue-driven simulation logic.

category

4

Topics

code_blocks

4

Code langs

hub

3

Related

Practice Focus

Medium · Queue-driven state processing

bolt

Answer-first summary

Determine the initial deck order to reveal cards in strictly increasing order using queue-driven simulation logic.

Interview AiBox logo

Ace coding interviews with Interview AiBox guidance for Queue-driven state processing

Try AiBox Copilotarrow_forward

This problem requires simulating card reveals with a queue-driven process. By sorting the deck and using a queue to track positions, we can reverse-engineer the initial order that produces an increasing reveal sequence. GhostInterview shows step-by-step how to maintain the correct order while repeatedly moving the next card to the bottom, ensuring a precise, interview-ready approach.

Problem Statement

You are given an integer array deck representing a deck of unique cards. Each element deck[i] corresponds to a card's value. All cards start face down in a single deck, and you may reorder them in any sequence you choose.

The reveal procedure works as follows: repeatedly take the top card, reveal it, and if any cards remain, move the new top card to the bottom of the deck. Continue until all cards are revealed. Your goal is to determine an ordering of the deck that results in the cards being revealed in strictly increasing order.

Examples

Example 1

Input: deck = [17,13,11,2,3,5,7]

Output: [2,13,3,11,5,17,7]

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]

Example details omitted.

Constraints

  • 1 <= deck.length <= 1000
  • 1 <= deck[i] <= 106
  • All the values of deck are unique.

Solution Approach

Sort the deck

Begin by sorting the deck in ascending order. This ensures that the smallest card is revealed first, which aligns with the increasing sequence requirement.

Simulate the reveal in reverse using a queue

Use a queue to store positions where cards should go. Start from the largest card and simulate placing it in reverse order: move the last element to the front before inserting the current card, mirroring the 'move top to bottom' step backward.

Construct the initial deck order

Iteratively place each card from largest to smallest into the queue to build the initial deck sequence. Once complete, the queue represents the exact order to place the deck so that revealing cards produces an increasing sequence.

Complexity Analysis

Metric Value
Time O(n \log n)
Space O(n)

Sorting the deck takes O(n \log n) and simulating the queue for n elements takes O(n). Overall, time complexity is O(n \log n) and space complexity is O(n) due to the queue holding all card positions.

What Interviewers Usually Probe

  • Candidates who sort first and then simulate backwards show understanding of queue-driven state manipulation.
  • Watch for explicit handling of the 'move top card to bottom' step; missing it often causes wrong sequences.
  • Candidates may ask about stability or whether duplicates exist; this signals attention to constraints and uniqueness.

Common Pitfalls or Variants

Common pitfalls

  • Failing to simulate the reveal process in reverse order, leading to incorrect initial deck sequences.
  • Ignoring the move-to-bottom step when constructing the initial deck order, producing non-increasing reveals.
  • Attempting to place cards greedily without a queue, which often breaks the intended reveal pattern for larger decks.

Follow-up variants

  • Reveal cards in decreasing order using a similar queue-driven approach but starting from the largest card.
  • Allow duplicate cards in the deck, requiring additional tracking to maintain correct relative positions.
  • Simulate a double-move variant where the top two cards are moved instead of one, increasing queue complexity.

FAQ

What is the main strategy to solve Reveal Cards In Increasing Order?

Sort the deck and simulate the reveal process in reverse using a queue to determine the initial order that produces strictly increasing reveals.

Why is a queue used in this problem?

The queue models the 'move top card to bottom' operation, allowing reverse simulation to reconstruct the starting deck arrangement accurately.

Can this approach handle decks with up to 1000 cards efficiently?

Yes, sorting and queue simulation are both linearithmic or linear in time, which is efficient for n <= 1000.

What happens if the deck contains duplicate values?

The original problem assumes all cards are unique; duplicates would require additional logic to preserve correct reveal ordering.

Is the solution pattern specific to queue-driven state processing?

Absolutely, the problem relies on the queue-driven simulation pattern to manage positions and reconstruct the initial deck for increasing reveals.

terminal

Solution

Solution 1

#### Python3

1
2
3
4
5
6
7
8
class Solution:
    def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
        q = deque()
        for v in sorted(deck, reverse=True):
            if q:
                q.appendleft(q.pop())
            q.appendleft(v)
        return list(q)
Reveal Cards In Increasing Order Solution: Queue-driven state processing | LeetCode #950 Medium