LeetCode406:根据身高重建队列

embedded/2024/9/23 21:20:22/

题目描述
假设有打乱顺序的一群人站成一个队列,数组 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/embedded/30251.html

相关文章

java发送请求2次开发-get请求json

因为你请求参数不为空&#xff0c;接口都会把这个参数带上 所以借鉴HttpPost类 继承这个类&#xff0c; 这个类是可以带消息的 httpgetwithentity&#xff0c;httpget请求带上消息 复写 构造方法复制过来进行使用 二次开发类让其get请求时可以发送json

4月份全球市场推出的18款网络安全热点产品和服务:生成式AI应用主导安全产品创新

CSO在线追踪了4份全球市场推出的18代表性网络安全产品和服务&#xff0c;从中可以观察网络安全产品创新趋势和风向。 1、Salt Security 在其API保护平台添加 OAuth安全产品 4月25日&#xff1a;Salt Security 在其API保护平台中添加了新的 OAuth 安全产品&#xff0c;以帮助组…

conda的一些问题

我是windows&#xff0c;conda下载的包下载到了c盘的.conda文件夹下&#xff0c;这是为什么&#xff1f; Conda 在 Windows 系统上默认会在用户的主目录下创建一个 .conda 文件夹&#xff0c;用来存储一些临时文件和包的缓存。这个路径是由 Conda 的默认配置决定的&#xff0c…

JavaScript百炼成仙自学笔记——5

说一下你对JavaScript数组的理解 数组有四种定义方式&#xff1a; 方式一 var arr ["first","second","third"]; console.log(arr); ↑这种方法的好处是在定义数组的时候就可以直接对这个数组进行初始化。 方式二 var a new Array(); ↑…

电机控制系列模块解析(13)—— 死区非线性

一、逆变器死区非线性 逆变器死区非线性是指在逆变器的功率开关器件&#xff08;如IGBT、MOSFET等&#xff09;进行开关切换时&#xff0c;为了防止上下桥臂的开关器件同时导通而引发直通短路&#xff0c;通常会在开关器件的驱动信号中加入一段“死区时间”。在这段时间内&…

预训练模型介绍

一、什么是GPT GPT 是由人工智能研究实验室 OpenAI 在2022年11月30日发布的全新聊天机器人模型, 一款人工智能技术驱动的自然语言处理工具 它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动,能完成撰写邮件、视频脚本、文案、翻译、代码等任务 二、 为…

Nginx深度解析:核心特性、应用场景与全局、events、http等全面配置指南

Nginx是一款高性能的Web服务器与反向代理服务器软件&#xff0c;以其高并发处理能力、低内存消耗和反向代理负载均衡功能闻名。它通过事件驱动、异步非阻塞I/O模型&#xff0c;实现了极高的效率和稳定性&#xff0c;广泛应用于网站部署、API代理、静态资源服务及微服务架构中&a…

Android手写自己的路由SDK

实现自己的路由框架 ​ 在较大型的Android app中常会用到组件化技术&#xff0c;针对不同的业务/基础功能对模块进行划分&#xff0c;从上到下为壳工程、业务模块、基础模块。其中业务模块依赖基础模块&#xff0c;壳工程依赖业务模块。同级的横向模块&#xff08;比如多个业务…