根据身高重建队列
/**
* @param {number[][]} people
* @return {number[][]}
*/
// var reconstructQueue = function (people) {
// //首先降序排序,因为前面的身高必然均高于后面的,所以放心的用第二个数字作为下标插入就是
// const peopleDesc = people.toSorted((a, b) => {
// if (b[0] === a[0]) return a[1] - b[1]; // 身高相同时,按照第二个值升序排列
// return b[0] - a[0]; // 否则按照身高降序排列
// });
// // 用一个空数组 result 来存储结果
// // 用一个空数组 result 来存储结果
// const result = [];
// // 按照第二个数字 k 插入到相应的位置
// for (let p of peopleDesc) {
// result.splice(p[1], 0, p); // 在 k 位置插入元素 p
// }
// return result; // 返回重新排序的队列
// };
var reconstructQueue = function(people) {
// 首先按照身高降序排列,如果身高相同,则按照第二个值升序排列
const peopleDesc = people.toSorted((a, b) => {
if (b[0] === a[0]) return a[1] - b[1]; // 身高相同时,按照第二个值升序排列
return b[0] - a[0]; // 否则按照身高降序排列
});
// 遍历数组,通过 splice 移动元素
for (let i = 0; i < peopleDesc.length; i++) {
const p = peopleDesc[i]; // 当前要处理的元素
const targetIndex = p[1]; // 元素应插入的目标位置
// 如果当前元素的位置不等于它的目标位置,才需要移动
if (i !== targetIndex) {
// 移除当前元素
peopleDesc.splice(i, 1);
// 在目标位置插入元素
peopleDesc.splice(targetIndex, 0, p);
}
}
return peopleDesc; // 返回重构后的数组
};