Queue Reconstruction By Height

To solve this coding challenge, we need to reconstruct a queue based on a list of people, where each person is represented by a pair of numbers \([h_i, k_i]\). Here, \(h_i\) represents the height of the person and \(k_i\) represents the number of people in front of this person who have a height greater than or equal to \(h_i\). The solution involves sorting and then inserting each person into the correct position in the queue.
# Explanation
The primary insight to solve this problem involves sorting the people by height in descending order and then by the number of people in front of them (k-value) in ascending order. This sorting ensures that when we insert each person into the queue, the height conditions are always fulfilled because we place the taller people first.
Detailed Steps in Pseudocode
  1. Sort the array : First, we sort the array of people. We sort by descending height and for people of the same height, by ascending k-value.
    • This ensures that, at each step of the insertion process, all "taller" people have already been positioned in the queue.
  2. Inject people into the queue : We sequentially insert each person into a new queue based on their k-value. The k-value directly gives the position in the queue where the person should be inserted. Since the people with greater height are already positioned, this guarantees that the k conditions are maintained.
  3. Pseudocode Explanation with Comments
    Here is the pseudocode with comments explaining each step:
                                                
    # Define the function to reconstruct the queue
    # Input: people - List of tuples where each tuple contains a height and a k-value
    # Output: reconstructed_queue - The resultant queue reconstructed based on the given rules
    function reconstructQueue(people):
    
    # Step 1: Sort the people list
    # Sort by height in descending order and by k-value in ascending order for people with same height
    people.sort( sort by -height and then by k_value )
    
    # Initialize an empty list to hold the reconstructed queue
    reconstructed_queue = []
    
    # Step 2: Insert each person into the ouput list:
    for person in people:
    # The position to insert the person in the reconstructed_queue is given by the k-value
    # Insert the person at the index defined by their k-value
    insert person at index person[1] in reconstructed_queue
    
    # Return the reconstructed queue
    return reconstructed_queue
    
                                            
    Detailed Step-by-Step Explanation
  4. Sort the People List :
    • * **Why Descending Height**: By sorting by height in descending order, we ensure that when we place each person, all the "taller" and "equal height" people that need to be in front of this person are already considered. * **Why Ascending k-value**: Sorting by k-value in ascending order for people with the same height ensures that we place a person in the first available valid position relative to people of the same height.
  5. Insert into the Queue :
    • * Starting with an empty result list (reconstructed_queue), we iterate over the sorted list of people. * For each person, we directly insert them into the index equal to their k-value. This is because the k-value represents how many people of greater or equal height should be in front of them, and since we've already sorted by height, this insert operation correctly maintains the queue order.
Example Walkthrough
Consider the example input:
[[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
.
* After sorting, we would get:
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
.
* Insert each person one by one into the list
reconstructed_queue
based on their k-value.
  • Insert [7, 0]:
    [[7, 0]]
  • Insert [7, 1]:
    [[7, 0], [7, 1]]
  • Insert [6, 1]:
    [[7, 0], [6, 1], [7, 1]]
  • Insert [5, 0]:
    [[5, 0], [7, 0], [6, 1], [7, 1]]
  • Insert [5, 2]:
    [[5, 0], [7, 0], [5, 2], [6, 1], [7, 1]]
  • Insert [4, 4]:
    [[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]
Finally, the reconstructed queue is
[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]
, matching the expected output.