1. 머리말
어제 정렬된 배열의 연결 문제를 해결하는 방법에 대한 문제가 발생했습니다. 이는 매우 일반적인 문제입니다. 하지만 여기서는 코드의 효율성을 고려해야 합니다. 연결될 어레이가 모두 순서대로 정렬되어 있기 때문에 이는 매우 중요한 전제 조건입니다.
2. 단순하지만 비효율적인 알고리즘
제가 가장 먼저 생각한 것은 내장된 concat 방법을 사용한 후 정렬하는 것이었습니다. 이 방법은 배열 순서라는 전제 조건을 고려하지 않습니다.
function concatSort(arrA,arrB){
return arrA.concat(arrB).sort()
}
정렬에 어떤 알고리즘이 사용되는지 알아보기 위해 특별히 V8 엔진의 알고리즘(Connection)을 살펴보았는데, 이는 아마도 배열의 길이가 짧을 경우 삽입 정렬이 된다는 의미일 것입니다. InsertionSort)를 사용하며, 배열의 길이가 긴 경우에는 Quick Sort(QuickSort)를 사용합니다. 나는 오랫동안 그런 종류의 버블링을 사용한다고 생각했던 오해를 바로잡았습니다.
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 < ; allLen; k ){
if(i = lenB || arrA[i] result.push(arrA[i ]);
}else{
result.push(arrB[j]) [3,5,6,7,10]
console.log(con(a,b)); ,2,3,4,5,6,7,10]
jsperf에서 위의 방법 1과 이 알고리즘의 성능을 비교해 보면 두 번째 알고리즘의 효율성이 첫 번째 알고리즘보다 훨씬 더 우수하다는 것을 알 수 있습니다. 믿을 수 없다면
여기
를 누르세요.
배열 수를 늘리면, 예를 들어 A = [1,5], B = [2,6] , C = [ 3,4]....K = [....], 병합된 배열을 찾습니다.
이 질문을 받았을 때 첫인상은 "병합 알고리즘"과 매우 유사하다는 것이었지만, 병합 알고리즘을 사용하려면 배열이 정렬되는 전제 조건이 필요하지 않습니다. 그러다가 힙 정렬, 퀵 정렬 등의 알고리즘을 생각해 보았지만 배열 순서의 전제 조건을 효과적으로 사용할 수 없다는 것을 발견하고 결국 포기했습니다. 인터뷰 후에도 저는 오랫동안 고민했고 이 문제를 효율적으로 해결하는 방법을 몰랐습니다. 기숙사로 돌아가려는데 후배가 "또 휴일이구나"라며 나를 깨웠다. 코드는 다음과 같다.
function conMore(){
var externalArr = [], i ,len = 인수.길이 , 결과 = [];
for(i = 0 ; i
}
if(result.length === 0){
result = externalArr[0];
}
for(i=1 ;i result = con(result,outerArr[i]);
}
결과 반환;
}
함수 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 ]);
}
}
결과 반환;
}
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对代码的性能进行测试分析,结果请猛击这里.

win11无法连接局域网打印机怎么办?有不少用户的win11系统在使用局域网打印机功能的时候,无法正常连接到共享打印机,出现这个问题,可能是连接步骤或者是某项功能服务没打开。今天小编就给大家带来了多种解决方法,很多小伙伴不知道怎么详细操作,小编下面整理了win11电脑不能连共享打印机解决技巧,如果你感兴趣的话,跟着小编一起往下看看吧!win11电脑不能连共享打印机解决技巧1、首先,按键盘上的Win+X组合键,或右键点击任务栏上的Windows开始图标,在打开的隐藏菜单项中,选择运行;2、运行窗口

MariaDB是一种开源的关系型数据库管理系统,它是MySQL的一个分支。PHP作为一种开源的服务器端脚本语言,被广泛应用于Web开发中。在很多Web开发项目中,需要使用PHP连接到MariaDB数据库,以便在Web应用程序中存储和检索数据。这篇文章将介绍如何使用PHP编写代码来连接MariaDB数据库。一、安装MariaDB服务器在使用PHP连接Maria

MySQL连接错误1203,如何解决?MySQL是一种广泛使用的关系型数据库管理系统,但是在使用MySQL时,一些连接错误可能会出现。其中一个常见的错误是错误代码1203,它表示数据库连接已中断。在遇到这个错误时,可以采取一些措施来解决问题。首先,我们需要确定错误1203的确切原因。这个错误通常是由于连接超时或连接过多引起的。连接超时可能是由于数据库服务器负

随着现代程序开发的不断发展,软件项目往往需要同时使用多个任务库来处理不同的任务。PHP语言一直是Web开发的重要工具,其在7.0版本中引入了新的并发处理特性,使得PHP在处理任务库时更加高效、灵活。在8.0版本中,PHP又新增了对连接多个任务库的支持,这为我们在处理大量数据和并发请求时提供了极大的便利。在本文中,我们将探讨PHP8.0中连接多个任务库的方法和

如何在Java程序中优化MySQL连接的写入性能和并发性能?在开发Java程序时,我们经常需要使用到数据库,而MySQL作为一种常见的数据库管理系统,其连接的写入性能和并发性能是我们需要关注的重点。本文将介绍如何在Java程序中优化MySQL连接的写入性能和并发性能,以提升程序的效率。使用连接池管理连接:连接池可以管理数据库连接的创建、销毁和复用,避免频繁地

Python连接阿里云接口,实现邮件发送功能阿里云提供了一系列的服务接口,其中包括了邮件发送服务。通过Python脚本连接阿里云接口,我们可以实现邮件的快速发送。本篇文章将向您展示如何使用Python脚本连接阿里云接口,并实现邮件发送功能。首先,我们需要在阿里云上申请邮件发送服务,获取相应的接口信息。在阿里云管理控制台中,选择邮件推送服务,然后创建一个新的邮

MySQL连接错误2059,该如何解决?在使用MySQL数据库时,有时会遇到连接错误2059的问题。这个错误通常是由于MySQL服务器与客户端之间的连接问题引起的。在本文中,我将解释导致此错误的一些常见原因,并提供一些可能的解决方案。防火墙问题:在一些情况下,防火墙设置可能会阻止MySQL服务器与客户端之间的通信。这种情况下,你需要检查防火墙设置并确保MyS

Java连接数据库的SQLException异常常见原因是什么?在Java开发中,Database操作是非常关键的一环。其中,对于常用的CRUD操作,特别是SELECT和INSERT操作,都需要使用到JDBC来实现。但是,在JDBC应用开发中,与数据库的连接操作、SQL语言的执行过程、以及结果集的处理等阶段,可能会发生SQLException异常。本文将分析


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

뜨거운 주제



