406. 根据身高重建队列

本文介绍了如何使用C++实现LeetCode中按身高重建队列问题,探讨了vector和list在排序和插入操作上的差异,以及如何利用迭代器在list中进行高效的元素插入。通过实例代码演示了如何利用`sort`和链表特性解决此问题。
摘要由CSDN通过智能技术生成

406. 根据身高重建队列

LeetCode刷题打卡第005天 20210714

题目链接
在这里插入图片描述

知识点引入:

  1. string 和 vector支持直接对迭代器进行删减某个数字,如str.begin()+2的写法是合法的
  2. list 运用的为链表,所以进行插入和删除的速度比较快,而vector运用的为线性结构,进行插入和删除时移动的数据范围比较大
  3. 因此当运用list时,速度更快,但是缺点是占用的内存空间更大,因为需要有指针进行表示数据之间的关系;

代码1

class Solution {
public:
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        //本来不是按照顺序排的顺序,现在改为按照规则的排序
        //两种情况1. 按照第二个进行排子虚
        sort(people.begin(),people.end(),cmp);
        vector<vector<int>>que;
        for(int i=0;i<people.size();i++){
            int position=people[i][1];
            que.insert(que.begin()+position,people[i]);
            //可以直接插入,不必用迭代器
        }
        return que;

    }
    //按照身高降序排列
    static bool cmp(vector<int> a,vector<int> b){
        if(a[0]==b[0]) return a[1]<b[1];
        return a[0]>b[0];
    }
};

代码2

class Solution {
public:
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        //本来不是按照顺序排的顺序,现在改为按照规则的排序
        sort(people.begin(),people.end(),cmp);
        list<vector<int>>que;    
        //知识点引入,list不可直接用que.insert(que.begin()+position,people[i]),必须运用迭代器,
         for (int i = 0; i < people.size(); i++) {
            int position = people[i][1]; // 插入到下标为position的位置
            std::list<vector<int>>::iterator it = que.begin();
            while (position--) { // 寻找在插入位置
                it++;
            }
            que.insert(it, people[i]);
        }
        return vector<vector<int>>(que.begin(), que.end());
    }
    //按照身高降序排列
    static bool cmp(vector<int> a,vector<int> b){
        if(a[0]==b[0]) return a[1]<b[1];
        return a[0]>b[0];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值