• 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)  相当于截取数组,返回新数组。不会改变原数组。

  • 相关阅读:
    hdu1561--树形dp<依赖背包>
    hdu--1520--树形dp<写起来就是深搜啊>-<滚动数组优化>
    hdu--1595-另类最短路
    hdu--1599--最小环<会加深你对floyd的理解>
    hdu--1851--尼姆博弈&&巴什博弈<也有人用了sg可惜我还不懂>
    hdu--4920--原来一直写了速度慢的矩阵乘法
    hdu--4912--终于解脱了
    hdu--4947--我太天真了
    hdu--2576--高中数学..
    hdu--2579--第二次与女孩的约会
  • 原文地址:https://www.cnblogs.com/liangtao999/p/13992012.html
Copyright © 2020-2023  润新知