参考:
https://blog.csdn.net/camellhf/article/details/52671119web
https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89348/6-lines-Concise-C%2B%2Bsvg
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后面都知足条件),所以首先须要按照身高排序。spa