首页 web前端 js教程 js有序数组的连接问题_javascript技巧

js有序数组的连接问题_javascript技巧

May 16, 2016 pm 05:21 PM
有序数组 连接

1.前言 

昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。

2.简单但效率不高的算法 

 我首先想到的是使用内置的concat方法,然后再对其进行排序,这种方法完全没有考虑到数组是有序的前提条件,代码如下:    

复制代码 代码如下:

function concatSort(arrA,arrB){
     return arrA.concat(arrB).sort();
}

  为了弄清楚sort排序到底使用的是什么算法,特地到看了V8引擎的算法(连接),大概意思是当数组的长度较短的时候使用的是插入排序(InsertionSort),当数组的长度较长的时候使用的是快速排序(QuickSort)。纠正了自己长时间来的一个误区,一直以为sort使用的是冒泡。

3. 取小值插入的方法 

 大概思路:就是同时对两个数组进行遍历,设置两个标志(i,j)用于记录遍历的位置,将两个数组中较小的那个值插入新数组中,接着再将标志往前移动一个位置,重复比较,直到搜索值都插入到数组中。第一次做的时候判断条件写错了,所以出现了死循环,暴露了自己算法能力还是挺薄弱的。     

复制代码 代码如下:

function con(arrA,arrB){
   var i , j , k, lenA = arrA.length, lenB = arrB.length , allLen = lenA + lenB,result = [];
   for(i=0,j=0,k =0; k        if(i = lenB || arrA[i]            result.push(arrA[i++]); 
       }else{
            result.push(arrB[j++]);
       }
   }
   return result;
}
var a = [1,2,4], b = [3,5,6,7,10];
console.log(con(a,b));  //[1,2,3,4,5,6,7,10]

  将这个算法与上面的方法1,在jsperf进行性能对比,发现第二种算法的效率明显优于第一种。不相信就猛击这里

4.问题升级:增加合并数组的数量

  假如增加数组的个数,;例如 A = [1,5],B = [2,6],C = [3,4].......K = [....],求合并的数组。   

     当时被问到这个问题,第一感觉就是很像”归并算法“,但是又一想使用归并算法是用不上数组有序这个前提条件的。接着又想到了堆排序、快排序等算法,发现就是无法很有效地用上数组有序这个前提条件,最后选择放弃。面试完后依然没有思路,想了好久不知道如何高效的解决这个问题。快回宿舍的时候,师弟说了一句”又要过节了“,”又“字点醒了我,代码如下:   

复制代码 代码如下:

function conMore(){
    var outerArr = [], i ,len = arguments.length , result = [];
    for(i = 0 ; i        outerArr.push(arguments[i]);
    }
    if(result.length === 0){
        result = outerArr[0];
    }
    for(i=1 ;i        result = con(result,outerArr[i]);
    }
    return result;
}
function con(arrA,arrB){
   var i , j , k, lenA = arrA.length, lenB = arrB.length , allLen = lenA + lenB,result = [];
   for(i=0,j=0,k =0; k        if(i = lenB || arrA[i]            result.push(arrA[i++]); 
       }else{
            result.push(arrB[j++]);
       }
   }
   return result;
}
var a = [1,4,7], b = [2,5,8], c = [3,6,9,10];
console.log(conMore(a,b,c));   //[1,2,3,4,5,6,7,8,9,10]

再次使用jsperf对代码的性能进行测试分析,结果请猛击这里.

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Win11游戏手柄连接完整指南 Win11游戏手柄连接完整指南 Jan 02, 2024 pm 05:26 PM

更新了最新的win11系统之后有不少的用户不清楚该怎么连接手柄进行游戏,为此我们今天专给你们带来了win11连接手柄详细教程,如果你还没有完成连接就来看看怎么操作吧。win11怎么连接手柄:1、点击下方的开始然后进入windows设置开启“控制面板”。2、进入之后就可以找到“查看设备和打印机”进行进入。3、此时你能够看到手柄设备的信息,进行连接就行了。4、连接成功之后出现一个√,就可以完成连接了。

win7打印机无法连接的错误代码0x0000011b win7打印机无法连接的错误代码0x0000011b Dec 26, 2023 pm 10:01 PM

很多时候我们都需要用电脑来连接打印机进行各种打印的操作,但是有时候一些用户会遇到win7无法连接打印机0x0000011b这种问题情况,下面就是具体的应对解决方法。win7无法连接打印机0x0000011b1、快捷键“win+r”,输入“regedit”2、找到以下路径“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print”3、右键新建值“DWORD(32位)值(D)并且数值设置为0。将新建项目命名为“RpcAuthnLevelPri

如何在 Windows 11 上检查网络连接详细信息和状态 如何在 Windows 11 上检查网络连接详细信息和状态 Sep 11, 2023 pm 02:17 PM

为了确保您的网络连接正常工作或解决问题,有时您需要检查Windows11上的网络连接详细信息。通过这样做,您可以查看各种信息,包括您的IP地址、MAC地址、链接速度、驱动程序版本等,在本指南中,我们将向您展示如何做到这一点。如何在Windows11上查找网络连接详细信息?1.使用“设置”应用按+键打开Windows设置。WindowsI接下来,导航到左窗格中的网络和互联网,然后选择您的网络类型。在我们的例子中,这就是以太网。如果您使用的是无线网络,请改为选择Wi-Fi网络。在屏幕底部,您应该会看

keep体脂秤怎么连接 keep体脂秤怎么连接 Mar 07, 2024 pm 04:50 PM

keep体脂秤怎么连接?keep是有专门设计的体脂秤,但是多数的用户不知道如何连接keep的体脂秤,接下来就是小编为用户带来的keep体脂秤连接方法图文教程,感兴趣的用户快来一起看看吧!keep体脂秤怎么连接1、首先打开keep软件,进入到主页面点击右下角【我的】选择其中的【智能硬件】;2、然后在我的智能设备页面,中间【添加设备】按钮;3、之后在选择你要添加的设备界面,选择【智能体脂/体重秤】;4、接着在选择设备型号页面,点击【keep体脂秤】选项;5、最后在下图所示的界面,最底部的【立即添加】

打印机错误代码0x0000011b的含义 打印机错误代码0x0000011b的含义 Feb 18, 2024 pm 10:02 PM

连接打印机0x0000011b是什么意思在使用电脑、笔记本或者其他设备时,用户常常会遇到各种错误代码。其中,0x0000011b是一种常见的打印机连接错误代码。那么,连接打印机0x0000011b到底是什么意思呢?首先,我们需要了解一下打印机连接的基本原理。当我们需要从电脑上打印文件时,通常需要将打印机连接到电脑上,以便二者之间进行数据传输。这种连接可以通过

解决Windows 10网络连接受限的方法 解决Windows 10网络连接受限的方法 Feb 19, 2024 pm 09:20 PM

Win10连接网络受限制解决办法随着科技的快速发展,网络已经成为了人们生活中不可或缺的一部分。然而,有时我们在使用Windows10操作系统的电脑连接网络时可能会遇到一些问题,其中之一就是连接受限制。这种情况下,我们无法正常访问网页、下载文件或者使用网络功能。那么,有什么办法能够解决这个问题呢?本文将为您介绍几种常见的解决办法。一、检查网络连接设置首先,我

共享打印机无法连接到打印机 共享打印机无法连接到打印机 Feb 22, 2024 pm 01:09 PM

随着数字化时代的发展,共享打印机成为现代办公环境中不可或缺的一部分。然而,有时我们可能会遇到共享打印机无法连接到打印机的问题,这不仅会影响工作效率,还会带来一系列麻烦。本文旨在探讨共享打印机无法连接到打印机的原因和解决方法。共享打印机无法连接到打印机的原因有很多,其中最常见的原因是网络问题。如果共享打印机与打印机之间的网络连接不稳定或中断,那么就无法进行正常

一加手表怎么连接蓝牙耳机_一加手表连接蓝牙耳机的方法 一加手表怎么连接蓝牙耳机_一加手表连接蓝牙耳机的方法 Mar 23, 2024 pm 01:16 PM

1、将耳机放在耳机盒中并保持盖子打开,长按盒子上的按键使耳机进入进入配对状态。2、打开手表音乐功能并选择蓝牙耳机,或在手表设置功能选择蓝牙耳机。3、在手表选择该耳机即可配对成功。

See all articles