LeetCode406:根据身高重建队列

news/2024/11/17 9:43:51/

题目描述
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

在这里插入图片描述
解题思想
先根据身高进行降序排序,然后在根据k的值进行插入。
排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]

插入的过程:
插入[7,0]:[[7,0]]
插入[7,1]:[[7,0],[7,1]]
插入[6,1]:[[7,0],[6,1],[7,1]]
插入[5,0]:[[5,0],[7,0],[6,1],[7,1]]
插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]]
插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]

代码

class Solution {
public:static bool cmp(vector<int> &a, 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) {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;}
};

使用链表插入效率更高

class Solution {
public:static bool cmp(vector<int>& a, 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) {sort(people.begin(), people.end(), cmp);list<vector<int>> que; // list底层是链表实现,插入效率比vector高的多for (int i = 0; i < people.size(); i++) {int position = people[i][1];list<vector<int>>::iterator it = que.begin();while (position--) {it++;}que.insert(it, people[i]);}return vector<vector<int>>(que.begin(),que.end());}
};

http://www.ppmy.cn/news/1456024.html

相关文章

MATLAB 变换

MATLAB 变换&#xff08;Transforms&#xff09; MATLAB提供了用于处理诸如Laplace和Fourier变换之类的变换的命令。转换在科学和工程中用作简化分析和从另一个角度查看数据的工具。 例如&#xff0c;傅立叶变换允许我们将表示为时间函数的信号转换为频率函数。拉普拉斯变换使…

招展工作的接近尾声“2024上海国际科技创新展会”即将盛大开幕

2024上海国际科技创新展会&#xff0c;即将于6月中旬在上海新国际博览中心盛大召开。随着招展工作的接近尾声&#xff0c;目前仍有少量余位可供各企业和机构预定。这一盛大的科技展会&#xff0c;将汇聚全球智能科技领域的精英&#xff0c;共同展示最新的科技成果&#xff0c;探…

在Java中生成密集柜的位号,可以根据传入的柜子的列数、每列的层数、每层的位数来动态生成位号。

在Java中生成密集柜的位号,可以根据传入的柜子的列数、每列的层数、每层的位数来动态生成位号。这通常涉及嵌套循环,根据列、层、位号生成唯一的位号字符串,并将其存储在集合中 // 将整数转换为对应的字母public static char intToColumnLetter(int num) {return (char) (A …

Python 正则表达式 re.findall()

Python re.findall 正文示例一示例二示例三 正文 调用方法&#xff1a; re.findall(pattern, string, flags0)用法说明&#xff1a; 扫描整个 字符串&#xff0c;找到所有满足匹配样式的字符&#xff0c;将它们集合在一起以列表形式返回。其中这个返回的列表包含空的结果(没有…

从ETL与ELT谈起,理解数仓的任务

最近有个朋友&#xff0c;有几十 PB 的异构数据&#xff0c;数据源包括 MySQL、DB2、Oracle、CSV、磁带机&#xff0c;等等&#xff0c;然后他需要把这些数据中的一些信息做关联整合&#xff0c;从这几十 PB 的数据中提取出若干业务字段到数据仓库&#xff0c;做统一分析。 数…

C++初阶之list的使用和模拟以及反向迭代器的模拟实现

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 一.list简介 list是一个带头双向链表&#xff0c;在数据结构的时候…

前后端分离项目中的一些疑惑

1、前后端分离项目&#xff0c;浏览器发起请求后&#xff0c;请求的是前端服务器还是后端服务器&#xff1f; 在前后端分离的项目中&#xff0c;当浏览器发起请求时&#xff0c;它首先会请求的是前端服务器。 前后端分离的工作流程大致如下&#xff1a; 用户在浏览器中输入网…

实用的Chrome浏览器命令

Chrome浏览器是一款功能强大的浏览器&#xff0c;以下是一些实用的Chrome浏览器命令&#xff1a; Ctrl T&#xff1a;打开新标签页。Ctrl Shift T&#xff1a;恢复最近关闭的标签页。Ctrl W&#xff1a;关闭当前标签页。Ctrl L&#xff1a;选中地址栏。Ctrl D&#xff1…