美文网首页
406根据身高重建队列

406根据身高重建队列

作者: su945 | 来源:发表于2020-07-01 22:50 被阅读0次

题目描述

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

问题分析

  • 先排身高更高的,这是要防止后排入人员影响先排入人员位置
  • 每次排入新人员[h,k]时,已处于队列的人身高都>=h,所以新排入位置就是people[k]

先将people按照身高降序排序,又由于每次插入的位置是k,所以相同身高需要按k升序排序,否则插入位置会越界
由于后续需要频繁使用insert()操作,建议使用list作为中间容器
循环地从头读取people,根据people[i][1]也就是k,插入list,注意list的迭代器不支持随机访问,需要使用advance()找到应插入位置
将完成所有插入操作的list重建为vector返回
https://leetcode-cn.com/problems/queue-reconstruction-by-height/solution/406-gen-ju-shen-gao-zhong-jian-dui-lie-8xing-dai-m/

解题思路1

class Solution {
public:

    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        //排序
        sort(people.begin(), people.end(), [](const vector<int>&lhs, const vector<int>& rhs)
        {return lhs[0] == rhs[0] ? lhs[1] <= rhs[1] : lhs[0] > rhs[0]; });
        int len = people.size();
        list<vector<int>> tmp;
        //循环插入
        for (int i = 0; i < len; ++i)
        {
            auto pos = tmp.begin();
            //pos迭代器向前people[i][1]个位置
            advance(pos, people[i][1]);
            tmp.insert(pos, people[i]);
        }
        //重建vector返回
        return vector<vector<int>>(tmp.begin(), tmp.end());
    }
};

相关文章

  • '仰望视野'解leetcode406 2020-11-17(未允

    leetcode406. 根据身高重建队列[https://leetcode-cn.com/problems/qu...

  • TOP 86 - 91

    406. 根据身高重建队列[https://leetcode-cn.com/problems/queue-reco...

  • 406. 根据身高重建队列

    这道题我读了好久才明白是什么意思,是因为忽略了这句话——k是排在这个人前面且身高大于或等于h的人数。看到了这句话才...

  • leetcode 406 根据身高重建队列

    贪心,这题挺难想思路的,卡了差不多一个小时看的答案。 首先维护前面人每一个元素都比后面高!!!根据身高由高到低和名...

  • 406. 根据身高重建队列

    假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面...

  • 406. 根据身高重建队列

    假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面...

  • 406.根据身高重建队列

    解法 主要练习下比较器的使用,以及二维数组插入的处理

  • 406. 根据身高重建队列

    一题目: 二思路: 先排序,1.先按照身高排序降序排,2按照位置升序排, 再插入 根本思路:核心思想:高个子先站好...

  • 406. 根据身高重建队列

    假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people...

  • LeetCode 406. 根据身高重建队列

    题意:假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个...

网友评论

      本文标题:406根据身高重建队列

      本文链接:https://www.haomeiwen.com/subject/ockkqktx.html