参考:
https://blog.youkuaiyun.com/camellhf/article/details/52671119
https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89348/6-lines-Concise-C%2B%2B
sort自定义函数:如果想让元素按照升序排序就返回p1<p2,如果想按照降序排序就返回p1>p2
vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
auto comp = [](const pair<int, int>& p1, const pair<int, int>& p2)
{ return p1.first > p2.first || (p1.first == p2.first && p1.second < p2.second); }; //按照第一位降序,第二位升序排序
sort(people.begin(), people.end(), comp);
vector<pair<int, int>> res;
for (auto& p : people)
res.insert(res.begin() + p.second, p); //依次插入排序好的元素
return res;
}
个人理解:
一个人的身高为h,前面大于等于他的人数为k
考虑新插入一个人(5,3),要想让他偏移3个位置插入队列,那么必须已经有的队列中所有元素的身高都比他大(因为如果队列中有比他小的身高,那么他需要偏移的位置可能大于3,比如如果序列是7,7,6,那么(5,3)插入到6后面即可,但是如果是7,7,6,4,那么(5,3)既可以插到6后面,也可以插到4后面都满足条件),因此首先需要按照身高排序。