[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.
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]][My Answer]
class Solution {
public:
vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
sort(people.begin(), people.end(), comp);
vector<pair<int, int>> v;
for (int i = 0; i < people.size(); i++) {
v.insert(v.begin()+people[i].second, people[i]);
}
return v;
}
private:
static bool comp(pair<int, int> a, pair<int, int> b) {
return (a.first > b.first || (a.first == b.first && a.second < b.second));
}
};
<h, k>表示当前此人身高为h,他前面有k个身高大于等于h的人。我们要将这些人按实际情况排序。
那么自然而然的我们就想到了按身高从高到矮,将人放入结果中,如果有身高相同的,k值小的在前面。
这样每次放入一个人的时候,结果中的每个人的身高都大于等于要放入的人的身高,那么这个人的要放入的位置就是它的k值。
因此我先将people排序,再一次将它放入结果中。