【贪心算法】406根据身高重建队列

【贪心算法】406根据身高重建队列

题目

在这里插入图片描述

解析

区间问题,有两个维度,如何确定一个维度,然后再按照另一个维度重新排列,将身高按照从大到小的顺序进行排列,然后确定k维度。

也就是说先按照身高降序的顺序排列,然后再新开辟一个数组,循环遍历排序之后的数组,将区间拿出来按照第二个元素插入新开辟的数组的相应位置,这样就保证了最终的二维数组是按照k规则进行排列的(前面有几个人比他高)

代码

class Solution {
public:

    static bool compare(const vector<int> a,const vector<int> b){
        if(a[0] == b[0])  return a[1] < b[1];
        return a[0] > b[0];
    }

    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
      // 本题就是想让你将顺序恢复(原来的顺序是打乱的) 
      // 区间问题,有两个维度,如何确定一个维度,然后再按照另一个维度重新排列
      // 将身高按照从大到小的顺序进行排列,然后确定k维度
      sort(people.begin(),people.end(),compare);// 按照指定规则进行排序

      vector<vector<int>> que;// 重新开辟一个二维数组
      // 身高高的先插入
      for(int i = 0; i < people.size(); i++)
      {
          int position = people[i][1];// 取出排序后每一个区间的第二个元素:k
          // 将k插入指定位置  前面有k个人 
          que.insert(que.begin() + position,people[i]);
      }
      
      return que;


    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值