All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0401_0500.s0406_queue_reconstruction_by_height.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0401_0500.s0406_queue_reconstruction_by_height;

// #Medium #Array #Sorting #Greedy #Segment_Tree #Binary_Indexed_Tree
// #2022_07_16_Time_5_ms_(99.82%)_Space_43_MB_(93.43%)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 406 - Queue Reconstruction by Height\.
 *
 * Medium
 *
 * You are given an array of people, `people`, which are the attributes of some people in a queue (not necessarily in order). Each people[i] = [hi, ki] represents the ith person of height hi with **exactly** ki other people in front who have a height greater than or equal to hi.
 *
 * Reconstruct and return _the queue that is represented by the input array_ `people`. The returned queue should be formatted as an array `queue`, where queue[j] = [hj, kj] is the attributes of the jth person in the queue (`queue[0]` is the person at the front of the queue).
 *
 * **Example 1:**
 *
 * **Input:** people = \[\[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
 *
 * **Output:** [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
 *
 * **Explanation:**
 *
 *     Person 0 has height 5 with no other people taller or the same height in front.
 *     Person 1 has height 7 with no other people taller or the same height in front.
 *     Person 2 has height 5 with two persons taller or the same height in front, which is person 0 and 1.
 *     Person 3 has height 6 with one person taller or the same height in front, which is person 1.
 *     Person 4 has height 4 with four people taller or the same height in front, which are people 0, 1, 2, and 3.
 *     Person 5 has height 7 with one person taller or the same height in front, which is person 1.
 *     Hence [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] is the reconstructed queue. 
 *
 * **Example 2:**
 *
 * **Input:** people = \[\[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
 *
 * **Output:** [[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]] 
 *
 * **Constraints:**
 *
 * *   `1 <= people.length <= 2000`
 * *   0 <= hi <= 106
 * *   0 <= ki < people.length
 * *   It is guaranteed that the queue can be reconstructed.
**/
public class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people, (a, b) -> a[0] != b[0] ? -a[0] + b[0] : a[1] - b[1]);
        List res = new ArrayList<>();
        for (int[] a : people) {
            res.add(a[1], a);
        }
        return res.toArray(new int[people.length][]);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy