亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

javascript實(shí)現(xiàn)將多個(gè)有序數(shù)組合并為一個(gè)有序數(shù)組的算法

hiYoHoo / 1061人閱讀

摘要:假設(shè)有這樣一個(gè)需求,一個(gè)數(shù)組的子元素全是有序數(shù)組,類似我們希望將上述數(shù)組合并為一個(gè)有序數(shù)組,怎么處理呢最簡(jiǎn)單的方案就是將數(shù)組整體合并,然后排序,代碼如下但是上面的代碼沒(méi)有充分利用數(shù)組子元素本身就是有序數(shù)組這一特性,我們利用歸并排序算

假設(shè)有這樣一個(gè)需求,一個(gè)數(shù)組的子元素全是有序數(shù)組,類似:

let arr= [[1, 2], [0, 3, 4,4,4,6,7,8,9,10], [-1, 4],[-1,3],[-1],[100,200],[5,1000,30000]];

我們希望將上述數(shù)組合并為一個(gè)有序數(shù)組,怎么處理呢?

最簡(jiǎn)單的方案就是:
將數(shù)組整體合并,然后sort排序,代碼如下:

let ret=arr.reduce((arr1,arr2)=>arr1.concat(arr2)).sort((a,b)=>a-b);
ret=Array.from(new Set(ret));
console.log(ret);

但是上面的代碼沒(méi)有充分利用數(shù)組子元素本身就是有序數(shù)組這一特性,我們利用“歸并排序”算法,可以大大的提高類似數(shù)組的合并排序性能,代碼(代碼里面有詳細(xì)注釋)如下:

let arr= [[1, 2], [0, 3, 4,4,4,6,7,8,9,10], [-1, 4],[-1,3],[-1],[100,200],[5,1000,30000]];
// let arr= [[1,2,3]];

function merge(arr){

    //記錄每一個(gè)數(shù)組循環(huán)比較時(shí)的下標(biāo)變化
    function filterIndexArr() {
        indexArr=indexArr.filter((item,index)=>{
            return item.count{
            if (minVal>item.val){
                minVal=item.val;
                increaseArr=[item.index];
            }else if (minVal==item.val && index!=0){
                increaseArr.push(item.index)
            }
        });
        increaseArr.forEach((item)=>{
            let thatItem=item;
            indexArr.forEach((item)=>{
                if (item.index==thatItem){
                    item.count++;
                }
            });
        });
        filterIndexArr();
        ret.push(minVal);
    }

    let ret=[];
    let indexArr=arr.map((item,index)=>{
        return {
            index,
            count:0
        }
    });
    filterIndexArr();

    let compareArr=[];
    while (indexArr.length>1){
        //循環(huán)比較每個(gè)數(shù)組的第一個(gè)元素
        compareArr=indexArr.map((item,index)=>{
            return {
                index:item.index,
                val:arr[item.index][item.count]
            }
        });
        pushToArr(compareArr);
    }
    //取出最后不需要比較的數(shù)組元素,直接拼接到ret后面
    let remainArr=arr[indexArr[0].index].slice(indexArr[0].count);
    ret=ret.concat(remainArr);
    ret=Array.from(new Set(ret));
    return ret;
}

let ret=merge(arr);
console.log(ret);

由于子數(shù)組本身有序,分別記錄要被比較數(shù)組的下標(biāo),循環(huán)取出最小值push到ret就可以了,是不是很簡(jiǎn)單。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/84220.html

相關(guān)文章

  • 排序算法分析總結(jié)(附j(luò)s實(shí)現(xiàn)

    摘要:本文對(duì)一些排序算法進(jìn)行了簡(jiǎn)單分析,并給出了的代碼實(shí)現(xiàn)。平均時(shí)間復(fù)雜度不好分析,它是冒泡排序是穩(wěn)定的排序算法。冒泡排序是原地排序算法原地排序指的是空間復(fù)雜度是的排序算法。歸并排序,會(huì)將數(shù)組從中間分成左右兩部分。 本文對(duì)一些排序算法進(jìn)行了簡(jiǎn)單分析,并給出了 javascript 的代碼實(shí)現(xiàn)。因?yàn)楸疚陌舜罅康呐判蛩惴?,所以分析不?huì)非常詳細(xì),適合有對(duì)排序算法有一定了解的同學(xué)。本文內(nèi)容其實(shí)不...

    liaoyg8023 評(píng)論0 收藏0
  • 基于 Javascript 排序算法

    摘要:適用于數(shù)據(jù)比較少或基本有序的情況。插入排序時(shí)間復(fù)雜度為,空間復(fù)雜度為,屬于穩(wěn)定排序。算法適用于少量數(shù)據(jù)的排序。就像下圖這樣,可以理解桶的意思下圖是整個(gè)排序過(guò)程示意圖基數(shù)排序時(shí)間復(fù)雜度為,空間復(fù)雜度為,屬于穩(wěn)定排序。 寫在前面 個(gè)人感覺:javascript對(duì)類似排序查找這樣的功能已經(jīng)有了很好的封裝,以致于當(dāng)我們想對(duì)數(shù)組排序的時(shí)候只需要調(diào)用arr.sort()方法,而查找數(shù)組元素也只需要...

    tommego 評(píng)論0 收藏0
  • 歸并排序就這么簡(jiǎn)單

    摘要:歸并排序就這么簡(jiǎn)單從前面已經(jīng)講解了冒泡排序選擇排序插入排序快速排序了,本章主要講解的是歸并排序,希望大家看完能夠理解并手寫出歸并排序快速排序的代碼,然后就通過(guò)面試了如果我寫得有錯(cuò)誤的地方也請(qǐng)大家在評(píng)論下指出。 歸并排序就這么簡(jiǎn)單 從前面已經(jīng)講解了冒泡排序、選擇排序、插入排序,快速排序了,本章主要講解的是歸并排序,希望大家看完能夠理解并手寫出歸并排序快速排序的代碼,然后就通過(guò)面試了!如果...

    ingood 評(píng)論0 收藏0
  • 排序算法(Java)——那些年面試常見排序算法

    摘要:下面會(huì)介紹的一種排序算法快速排序甚至被譽(yù)為世紀(jì)科學(xué)和工程領(lǐng)域的十大算法之一。我們將討論比較排序算法的理論基礎(chǔ)并中借若干排序算法和優(yōu)先隊(duì)列的應(yīng)用。為了展示初級(jí)排序算法性質(zhì)的價(jià)值,我們來(lái)看一下基于插入排序的快速的排序算法希爾排序。 前言   排序就是將一組對(duì)象按照某種邏輯順序重新排列的過(guò)程。比如信用卡賬單中的交易是按照日期排序的——這種排序很可能使用了某種排序算法。在計(jì)算時(shí)代早期,大家普遍...

    Harpsichord1207 評(píng)論0 收藏0
  • 第7期 Datawhale 組隊(duì)學(xué)習(xí)計(jì)劃

    馬上就要開始啦這次共組織15個(gè)組隊(duì)學(xué)習(xí) 涵蓋了AI領(lǐng)域從理論知識(shí)到動(dòng)手實(shí)踐的內(nèi)容 按照下面給出的最完備學(xué)習(xí)路線分類 難度系數(shù)分為低、中、高三檔 可以按照需要參加 - 學(xué)習(xí)路線 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...

    dinfer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<