成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

前端中經(jīng)常出現(xiàn)的算法總結(jié)

noONE / 2058人閱讀

摘要:在一段時(shí)間的學(xué)習(xí)之后,我總結(jié)羅列了前端中常見見的幾個(gè)算法一排序算法排序算法是比較開發(fā)的算法之一,方法種類較多,在此列舉兩種簡(jiǎn)單的排序算法冒泡排序和快速排序。

雖說(shuō)我們很多時(shí)候前端很少有機(jī)會(huì)接觸到算法,但對(duì)算法的理解和掌握是一個(gè)優(yōu)秀工程師的評(píng)價(jià)標(biāo)準(zhǔn)之一,而且當(dāng)我們面對(duì)較為復(fù)雜的問題,這些基礎(chǔ)知識(shí)的積累可以幫助我們更好的優(yōu)化解決思路。在一段時(shí)間的學(xué)習(xí)之后,我總結(jié)羅列了前端中常見見的幾個(gè)算法:

一:排序算法

排序算法是比較開發(fā)的算法之一,方法種類較多,在此列舉兩種簡(jiǎn)單的排序算法:冒泡排序和快速排序。
冒泡排序其實(shí)就是通過(guò)比較相鄰位置的元素大小,如果左邊比右邊大,就交換位置,繼續(xù)比較,實(shí)際上就是每輪比較都得出一個(gè)最大值(或者最小值)。然后通過(guò)n-1輪比較,就能得出一個(gè)排好序的序列(通過(guò)設(shè)置一個(gè)flag,當(dāng)數(shù)組基本有序的時(shí)候其實(shí)不一定需要比較到n-1輪)。

 function bubbleSort(arr){
     for(var i=1;iarr[j+1]){
                 temp=arr[j];
                 arr[j]=arr[j+1];
                 arr[j+1]=temp;
             }
         }
     }
     return arr;
}

快速排序簡(jiǎn)單來(lái)講就是我們選定一個(gè)數(shù),然后比它小的都放在它左邊,大于等于它的都放在它右邊,那么這個(gè)時(shí)候?qū)@個(gè)數(shù)來(lái)講他的位置已經(jīng)排到了正確的地方了,接下來(lái)要做的就是在它的左右兩邊分別再進(jìn)行類似操作。

function quickSort(arr,l,r){
    var i,j,x;
    if(l=x){
                j--;
            }
            if(i

二:階乘算法

function factorialize(num) {
    var result = num;
    if (num < 0) {
        return -1;
    } else if (num === 0 || num === 1) {
        return 1;
    } else {
        while (num > 1) {
            num--;
            result *= num;
        }
    }
    return result;
}

三:回文字符串判斷

如果一個(gè)字符串忽略標(biāo)點(diǎn)符號(hào)、大小寫和空格,正著讀和反著讀一模一樣,那么這個(gè)字符串就是palindrome(回文)。

function palindrome(str) {
    // 刪除字符串中不必要的字符
    var re = /[W_]/g;
    // 將字符串變成小寫字符
    var lowRegStr = str.toLowerCase().replace(re, "");
    // 如果字符串lowRegStr的length長(zhǎng)度為0時(shí),字符串即是palindrome
    if (lowRegStr.length === 0) {
        return true;
    }
    // 如果字符串的第一個(gè)和最后一個(gè)字符不相同,那么字符串就不是palindrome
    if (lowRegStr[0] !== lowRegStr[lowRegStr.length - 1]) {
        return false;
    } else {
        return palindrome(lowRegStr.slice(1, lowRegStr.length - 1));
    }
}

四:翻轉(zhuǎn)字符串算法

function reverseString(str) { 
    var tmp = ""; 
    for (var i = str.length - 1; i >= 0; i--) { 
        tmp += str.charAt(i); 
    } 
    return tmp; 
} 

第二種翻轉(zhuǎn)字符串算法:

function reverseString(s) {
    var arr = s.split("");
    var i = 0, j = arr.length - 1;
    while (i < j) {
        var t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
        i++;
        j--;
    }
    return arr.join("");
}

五:整型數(shù)組去重算法

主要考察程序員對(duì)Object的使用,利用key來(lái)進(jìn)行篩選。

function unique(arr) 
     var hashTable = {};
     var data = [];
     for(var i = 0, l = arr.length; i < l; i++) {
         if(!hashTable[arr[i]]) {
             hashTable[arr[i]] = true;
             data.push(arr[i]);
         }
     }
     return data;
 }
 

六:數(shù)組中最大差值

function getMaxProfit(arr) {
    var minPrice = arr[0];
    var maxPrice = arr[0];
    var maxProfit = 0;
    for (var i = 0; i < arr.length; i++) {
        var currentPrice = arr[i];
        minPrice = Math.min(minPrice, currentPrice);
        maxPrice = Math.max(maxPrice, currentPrice);
    }
    maxProfit = Math.max(maxPrice-minPrice,maxPrice);
    return maxProfit;
}

七:隨機(jī)指定長(zhǎng)度字符串

function randomString(n) {
    var str = "abcdefghijklmnopqrstuvwxyz9876543210";
    var tmp = "";
    var l = str.length;
    for(var i = 0; i < n; i++) {
        tmp += str.charAt(Math.floor(Math.random() * l));
    }
    return tmp;
}

八:統(tǒng)計(jì)字符串中次數(shù)最多字母

function findMaxDuplicateChar(str) {
    if(str.length == 1) {
        return str;
    }
    var charObj = {};
    for(var i = 0; i < str.length; i++) {                       
        if(!charObj[str.charAt(i)]) {
            charObj[str.charAt(i)] = 1;
        } else {
            charObj[str.charAt(i)] += 1;
        }
    }
    var maxChar = "",
        maxValue = 1;
    for(var k in charObj) {
        if(charObj[k] >= maxValue) {
            maxChar = k;
            maxValue = charObj[k];
        }
    }
    return maxChar;
}

九:生成菲波那切數(shù)列數(shù)組

斐波那契數(shù)列,又稱黃金分割數(shù)列,指的是這樣一個(gè)數(shù)列:0、1、1、2、3、5、8、13、21、34、……在數(shù)學(xué)上,斐波納契數(shù)列主要考察遞歸的調(diào)用。通過(guò)定義fibo[i] = fibo[i-1]+fibo[i-2];來(lái)生成斐波那契數(shù)組。

function getFibonacci(n) {
    var fibarr = [];
    var i = 0;
    while(i < n) {
        if(i <= 1) {
            fibarr.push(i);
        } else {
            fibarr.push(fibarr[i - 1] + fibarr[i - 2])
        }
        i++;
    }
    return fibarr;
}

以上幾個(gè)前端中經(jīng)常會(huì)出現(xiàn)的小算法是學(xué)習(xí)中的練習(xí)和總結(jié),整理此文如果有錯(cuò)誤希望小伙伴們積極指正,有更好更簡(jiǎn)潔的算法知識(shí)也希望不吝分享,以求共同進(jìn)步。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/80855.html

相關(guān)文章

  • PHP面試總結(jié)

    摘要:而在面試過(guò)程中,也是經(jīng)常會(huì)遇到的,所以,無(wú)論是面試準(zhǔn)備還是日常開發(fā),我們都應(yīng)該關(guān)注這方面的東西。二分法的基本做法是確定要查找的區(qū)間。區(qū)間內(nèi)選取二分點(diǎn)。根據(jù)二分點(diǎn)的值,綜合左右區(qū)間情況以及求解的目的,舍去一半無(wú)用的區(qū)間。 showImg(https://images.pexels.com/photos/935977/pexels-photo-935977.jpeg); 前言 面試是你進(jìn)入...

    alin 評(píng)論0 收藏0
  • PHPer月工作總結(jié)之構(gòu)建抽獎(jiǎng)工具

    摘要:這個(gè)月的計(jì)劃本來(lái)是對(duì)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)做一個(gè)沉淀,但是,但是,但是這個(gè)月的的狀態(tài)就是工作工作既然這樣就總結(jié)下這個(gè)月的工作吧。 前言 目標(biāo)是每個(gè)月寫一篇文章,對(duì)從事編程開發(fā)的基礎(chǔ)知識(shí)做一個(gè)學(xué)習(xí)總結(jié)。這個(gè)月的計(jì)劃本來(lái)是對(duì)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)做一個(gè)沉淀,但是,但是,但是......這個(gè)月的的狀態(tài)就是工作工作...既然這樣就總結(jié)下這個(gè)月的工作吧。 工作內(nèi)容 促銷活動(dòng)的抽獎(jiǎng)工具,具備如下功能: 根據(jù)不同...

    W_BinaryTree 評(píng)論0 收藏0
  • 前端開發(fā)周報(bào): CSS 布局方式與JavaScript數(shù)據(jù)結(jié)構(gòu)和算法

    摘要:如果沒有學(xué)習(xí)過(guò)計(jì)算機(jī)科學(xué)的程序員,當(dāng)我們?cè)谔幚硪恍﹩栴}時(shí),比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無(wú)疑是一個(gè)很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...

    huhud 評(píng)論0 收藏0
  • 前端開發(fā)周報(bào): CSS 布局方式與JavaScript數(shù)據(jù)結(jié)構(gòu)和算法

    摘要:如果沒有學(xué)習(xí)過(guò)計(jì)算機(jī)科學(xué)的程序員,當(dāng)我們?cè)谔幚硪恍﹩栴}時(shí),比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無(wú)疑是一個(gè)很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...

    ?xiaoxiao, 評(píng)論0 收藏0

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

0條評(píng)論

閱讀需要支付1元查看
<