javascript中sort splice的用法实例

题目:

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。

示例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height

这题的关键在于:高个子看不到矮个子。所以先排高个,然后再排矮个子。矮个子的插入不会影响高个子的人数。

第一步 按身高降序,按人数升序。让结果变为:

[[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]]

第二步,遍历数组,根据人数插入到对应的位置。

[[7,0],[7,1]]
[[7,0], [6,1], [7,1]]
[[5,0], [7,0], [6,1], [7,1]]
[[5,0], [7,0], [5,2], [6,1], [7,1]]
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

完整代码:

/**
 * @param {number[][]} people
 * @return {number[][]}
 */
var reconstructQueue = function(people) {
    var a=[];
    people.sort((a,b)=>{
        return a[0]==b[0]?a[1]-b[1]:b[0]-a[0]//如果身高相等,按人数升序排列;如果身高不相等,按身高降序排列
    });
    for(var i of people){
        a.splice(i[1],0,i)
    }
    return a;
};

知识点:

1、sort排序。上面的代码sort排序包括两个知识点,一是多维数组取值可以直接用a[n]的方式。二排序规则可以有多种规则。

第一参数a, 第二参数b ------  a-b升序   b-a降序。

sort排序的基本原理是,利用冒泡和插入的方式,依次比较前面的数和当前数(二分法比较),把当前数插入到前面已排好的序列中。具体可参考

2、splice。插入/删除  会改变原数组。

第一个参数是索引,要插入或删除的位置

第二个参数是删除的个数,如果是0,则不删除,只插入。

第三/n个参数是插入的值(不必须)。

举例:

var a=[1,2,3,4,5]
a.splice(2,1)//[1,2,4,5]
a.splice(2,1,6)//[1,2,6,4,5]
a.splice(2,0,6)//[1,2,6,3,4,5]
a.splice(2,3,6)//[1,2,6]

区别:

slice(start,end)  相当于截取数组,返回新数组。不会改变原数组。

 

posted @ 2020-11-16 23:55  梁涛999  阅读(136)  评论(0编辑  收藏  举报