Try   HackMD

【LeetCode】 406. Queue Reconstruction by Height

Description

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.

假設有隨機的人群在列隊中。每個人有一對整數(h, k)去描述他,h是這個人的身高,k是他前面有多少人比他高。寫一個演算法重新排序這個列隊。

提示:
描述人的數字小於 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

  • 先讓人按照身高遞減排序。
  • 接著從頭跑一次列隊再重新排序一次,這次他前面有幾個人比他高就將他安插在哪個位子。
    • 因為列隊已經按照身高排序,後面的一定都比較矮,不會因為後面的人加入導致前面的人不符合k的規則。

Code

bool myCompare(vector<int> a, vector<int> b) { return (a[0] > b[0] || (a[0] == b[0] && a[1] < b[1])); } class Solution { public: vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { vector<vector<int>> ans; sort(people.begin(), people.end(), myCompare); for(int i = 0; i < people.size(); i++) ans.insert(ans.begin() + people[i][1], people[i]); return ans; } };
tags: LeetCode C++