leetcode406.根据身高重建队列

参考:
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