Class DinnerPlates

java.lang.Object
g1101_1200.s1172_dinner_plate_stacks.DinnerPlates

public class DinnerPlates extends java.lang.Object
1172 - Dinner Plate Stacks.

Hard

You have an infinite number of stacks arranged in a row and numbered (left to right) from 0, each of the stacks has the same maximum capacity.

Implement the DinnerPlates class:

  • DinnerPlates(int capacity) Initializes the object with the maximum capacity of the stacks capacity.
  • void push(int val) Pushes the given integer val into the leftmost stack with a size less than capacity.
  • int pop() Returns the value at the top of the rightmost non-empty stack and removes it from that stack, and returns -1 if all the stacks are empty.
  • int popAtStack(int index) Returns the value at the top of the stack with the given index index and removes it from that stack or returns -1 if the stack with that given index is empty.

Example 1:

Input

[“DinnerPlates”, “push”, “push”, “push”, “push”, “push”, “popAtStack”, “push”, “push”, “popAtStack”, “popAtStack”, “pop”, “pop”, “pop”, “pop”, “pop”]

[[2], [1], [2], [3], [4], [5], [0], [20], [21], [0], [2], [], [], [], [], []]

Output: [null, null, null, null, null, null, 2, null, null, 20, 21, 5, 4, 3, 1, -1]

Explanation:

 DinnerPlates D = DinnerPlates(2); // Initialize with capacity = 2
 D.push(1); 
 D.push(2); 
 D.push(3); 
 D.push(4); 
 D.push(5);          // The stacks are now: 2 4 
                                           1 3 5 
                                           \ufe48 \ufe48 \ufe48 
 D.popAtStack(0);    // Returns 2. The stacks are now:   4 
                                                    1 3 5 
                                                   \ufe48 \ufe48 \ufe48 
 D.push(20);         // The stacks are now: 20 4 
                                             1 3 5 
                                            \ufe48 \ufe48 \ufe48 
 D.push(21);         // The stacks are now: 20 4 21 
                                             1 3 5 
                                             \ufe48 \ufe48 \ufe48 
 D.popAtStack(0);    // Returns 20. The stacks are now: 4 21 
                                                        1 3 5 
                                                       \ufe48 \ufe48 \ufe48 
 D.popAtStack(2);    // Returns 21. The stacks are now: 4 
                                                      1 3 5 
                                                     \ufe48 \ufe48 \ufe48 
 D.pop()             // Returns 5. The stacks are now: 4 
                                                      1 3 
                                                      \ufe48 \ufe48 
 D.pop()             // Returns 4. The stacks are now: 1 3 
                                                      \ufe48 \ufe48 
 D.pop()             // Returns 3. The stacks are now: 1 
                                                       \ufe48 
 D.pop()             // Returns 1. There are no stacks. 
 D.pop()             // Returns -1. There are still no stacks.

Constraints:

  • 1 <= capacity <= 2 * 104
  • 1 <= val <= 2 * 104
  • 0 <= index <= 105
  • At most 2 * 105 calls will be made to push, pop, and popAtStack.
  • Constructor Summary

    Constructors
    Constructor
    Description
    DinnerPlates(int capacity)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    pop()
     
    int
    popAtStack(int index)
     
    void
    push(int val)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • DinnerPlates

      public DinnerPlates(int capacity)
  • Method Details

    • push

      public void push(int val)
    • pop

      public int pop()
    • popAtStack

      public int popAtStack(int index)