根据身高重建队列
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
};
Cocolib