当前位置: 代码迷 >> 综合 >> LeetCode(top100)根据身高重建队列
  详细解决方案

LeetCode(top100)根据身高重建队列

热度:95   发布时间:2024-02-13 05:06: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增序
//逐个将他们放入数组中,新放入的数组所在的位置索引是k值
splice语法:
list.splice(0,1,4); // 替换 -> 从下标为0开始,长度为1的数组元素替换成4,第一个值为下标

/*** @param {number[][]} people* @return {number[][]}*/
var reconstructQueue = function(people) {//首先按照身高h降序排列,同时如果身高相同那么按照k增序//逐个将他们放入数组中,新放入的数组所在的位置索引是k值let arr=[]people.sort((a,b)=>{if(a[0]===b[0]){return a[1]-b[1]   //a[1]和b[1]代表数组中K值}else{return b[0]-a[0] //a[0]和b[0]代表数组中h值}})for(let i=0;i<people.length;i++){arr.splice(people[i][1],0,people[i])  //people[i][1]为k的值,取应该放的位置的下标,0为删除0个,people[i]为添加当前元素}return arr;
};
思路(二)
/*** @param {number[][]} people* @return {number[][]}*/
var reconstructQueue = function(people) {//首先按照身高h降序排列,同时如果身高相同那么按照k增序//逐个将他们放入数组中,新放入的数组所在的位置索引是k值let arr=[]people.sort((a,b)=>{if(a[0]===b[0]){return a[1]-b[1]}else{return b[0]-a[0]}})people.forEach((item)=>{arr.splice(item[1],0,item)  //在当前元素的k值处不删除直接添加当前元素})return arr;
};