Queue Reconstruction by Height

Problem

Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k), where h is the height of the person and k is the number of people in front of this person who have a height greater than or equal to h. Write an algorithm to reconstruct the queue.

Note: The number of people is less than 1,100.

Example

Input:
[[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]]

Solution

Concise Sorting and list.add(index, element) Solution: O(n^2) time

public class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people, (p1, p2) -> p1[0] == p2[0] ? p1[1] - p2[1] : p1[0] - p2[0]); //Sort in descending order
        LinkedList<int[]> list = new LinkedList<>();
        for (int i = 0; i < people.length; i++) list.add(people[i][1], people[i]);
        return list.toArray(people); //list.toArray() will return Object[], we need int[][] 
    }
}

Analysis

The idea in this solution is that
We first sort the people with height and then number of people front in descending order
Then we insert people from higher to lower
Because inserting at existing index will shift current element to the right
We are able to put shorter person before the higher person Notice that because of list.add(index) costs O(n) time, total time for this solution is O(n^2) time

results matching ""

    No results matching ""