根据身高重建队列
https://leetcode.cn/problems/queue-reconstruction-by-height/description/
思路
这里的队列顺序很明显取决于两个关键因素。h和k,因此现根据一个因素排序,接着再根据另外一个因素进行调整。
如果先按照k进行排序,会发现k不符合条件,身高也不符合条件。
因此需要先按照h进行排序,排序完成后在根据身高依次遍历每一个数组,并根据k调整位置即可。
要注意第一次排序,身高降序排列,如果身高相同,根据k值升序排。这是为了后续调整插入队列时可以根据k直接确定位置。
按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。
所以在按照身高从大到小排序后:
局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性
全局最优:最后都做完插入操作,整个队列满足题目队列属性
局部最优可推出全局最优,找不出反例,那就试试贪心。
求解
1 | var reconstructQueue = function (people) { |
arr.splice()
splice() 是 JavaScript 中数组对象的一个方法,用于在数组中添加、删除或替换元素。
splice() 方法接受三个参数:
- start:开始修改的位置(索引)。
- deleteCount:要删除的元素数量。如果省略或大于 start 之后的元素数量,那么 start 之后的所有元素都会被删除。
- item1, item2, …:要添加到数组中的元素。这些元素将被添加到 start 参数指定的位置。如果省略这些参数,splice() 将只删除元素。
如果你想在数组中插入元素,你可以使用splice()方法,并将要删除的元素数量设置为0,然后提供要插入的元素。例如:
1 | let arr = [1, 2, 3]; |
如果你想从数组中删除元素,你可以使用splice()方法,并提供要删除的元素的开始位置和数量,不需要提供要插入的元素。例如:
1 | let arr = [1, 2, 3]; |
如果你想替换数组中的元素,你可以使用splice()方法,并提供要替换的元素的开始位置和数量,以及要插入的新元素。例如:
1 | let arr = [1, 2, 3]; |