lc950 Reveal Cards In Increasing Order

By | June 23, 2019
Share the joy
  •  
  •  
  •  
  •  
  •  
  •  

Count how many element it has. We don’t care about the number in array. We only care about the index. If there are 5 elements, we will need to a figure out the result for [0, 1, 2, 3, 4](which is actually [0, 4, 1, 3, 2]).

Then, we sort the input array, and reorder the deck[] according to index sequence.

Reverse process is like below:

950

public static int[] deckRevealedIncreasing(int[] deck) {
    int[] ans = new int[deck.length];
    Deque<Integer> deque = new LinkedList<>();
    deque.addLast(deck.length - 1);
    for (int i = deck.length - 2; i >= 0; i--) {
        deque.addFirst(deque.removeLast());
        deque.addFirst(i);
    }
    Arrays.sort(deck);
    for (int i = 0; i < ans.length; i++) {
        ans[i] = deck[deque.removeFirst()];
    }
    return ans;
}