leetcode406.根据身高重建队列

参考:
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后面都满足条件),因此首先需要按照身高排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值