406. 根据身高重建队列

87 篇文章 0 订阅
10 篇文章 0 订阅

原题链接:406. 根据身高重建队列

solution: 贪心

思路:身高高的人只会看到比他高的人,所以当身高高的人固定好了位置,前面插入多少个矮的人都不会破坏高的人的条件限制。所以应该先决定高的人的位置,再决定矮的人的位置;高的人限制条件少,矮的人限制条件多。

①先按身高从大到小排序,身高一样则按照k排序:身高大或k小意味着限制条件少,应该被优先考虑。

②依次插入元素:由上一点,先进入res的元素不会被后进入的元素影响,因此每一次插入只需要考虑自己不需要考虑别人。当遍历到元素[a,b]的时候,比它大的元素已经进组,比它小的元素还没进组,那么它应该插到res的第b位,从而实现0到b-1的数字都比它大。

class Solution {
public:
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        vector<vector<int>> res;    //定义返回值
        sort(people.begin(),people.end(),[](const vector<int> a,const vector<int> b){
            return a[0] > b[0] || (a[0] == b[0] && a[1] < b[1]);
        });
        for(auto &x : people) res.insert(res.begin() + x[1], x);
        return res;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值