根据身高重建队列
Question
假设有打乱顺序的一群人站成一个队列,数组 people
表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki]
表示第i
个人的身高为hi
,前面 正好 有ki
个身高大于或等于 hi
的人。
请你重新构造并返回输入数组 people
所表示的队列。返回的队列应该格式化为数组 queue
,其中 queue[j] = [hj, kj]
是队列中第 j
个人的属性(queue[0]
是排在队列前面的人)。

思路
如果在解题过程中遇到了两个维度都需要去考虑的情况,不要同时去考虑,选一个维度考虑
如果两个维度都去考虑的话一定会顾此失彼
如果不确定选择哪一个维度,可以两个维度分别模拟一遍
如果按照k来从小到大排序,排完之后,会发现k的排列并不符合条件,身高也不符合条件,两个维度哪一个都没确定下来。
那么按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。
此时我们可以确定一个维度了,就是身高,前面的节点一定都比本节点高!
那么只需要按照k为下标重新插入队列就可以了
js
var reconstructQueue = function(people) {
people = people.sort((a,b)=>{ //按身高由高到低排序
if(a[0] === b[0]) return a[1]<b[1]?-1:1 //如果身高相同,ki 小的人在前
else return a[0]>b[0]?-1:1
})
console.log(people)
let position
let queue = []
for(let i=0;i<people.length;i++){ //遍历
position = people[i][1]
queue.splice(position,0,people[i]) //JS 在数组指定位置插入/删除/替换数据的方法
}
return queue
};