2019中高級前端秘籍之算法篇


2019中高級前端秘籍之CSS篇
2019中高級前端秘籍之JavaScript篇
2019中高級前端秘籍之瀏覽器篇
2019中高級前端秘籍之服務端與網絡篇
2019中高級前端秘籍之算法篇


其實算法方面在前端的實際項目中涉及得并不多芙粱,但還是需要精通一些基礎性的算法赵誓,一些公司還是會有這方面的需求和考核悬荣,建議大家還是需要稍微準備下,這屬于加分題界轩。

1. 五大算法

  • 貪心算法: 局部最優(yōu)解法
  • 分治算法: 分成多個小模塊,與原問題性質相同
  • 動態(tài)規(guī)劃: 每個狀態(tài)都是過去歷史的一個總結
  • 回溯法: 發(fā)現(xiàn)原先選擇不優(yōu)時,退回重新選擇
  • 分支限界法

2. 基礎排序算法

  • 冒泡排序: 兩兩比較
    function bubleSort(arr) {
        var len = arr.length;
        for (let outer = len ; outer >= 2; outer--) {
            for(let inner = 0; inner <=outer - 1; inner++) {
                if(arr[inner] > arr[inner + 1]) {
                    [arr[inner],arr[inner+1]] = [arr[inner+1],arr[inner]]
                }
            }
        }
        return arr;
    }
  • 選擇排序: 遍歷自身以后的元素彻犁,最小的元素跟自己調換位置
function selectSort(arr) {
    var len = arr.length;
    for(let i = 0 ;i < len - 1; i++) {
        for(let j = i ; j<len; j++) {
            if(arr[j] < arr[i]) {
                [arr[i],arr[j]] = [arr[j],arr[i]];
            }
        }
    }
    return arr
}
  • 插入排序: 即將元素插入到已排序好的數組中
function insertSort(arr) {
    for(let i = 1; i < arr.length; i++) {  //外循環(huán)從1開始局待,默認arr[0]是有序段
        for(let j = i; j > 0; j--) {  //j = i,將arr[j]依次插入有序段中
            if(arr[j] < arr[j-1]) {
                [arr[j],arr[j-1]] = [arr[j-1],arr[j]];
            } else {
                break;
            }
        }
    }
    return arr;
}

3. 高級排序算法

  • 快速排序
    • 選擇基準值(base)斑响,原數組長度減一(基準值),使用 splice
    • 循環(huán)原數組钳榨,小的放左邊(left數組)舰罚,大的放右邊(right數組);
    • concat(left, base, right)
    • 遞歸繼續(xù)排序 left 與 right
function quickSort(arr) {
    if(arr.length <= 1) {
        return arr;  //遞歸出口
    }
    var left = [],
        right = [],
        current = arr.splice(0,1); 
    for(let i = 0; i < arr.length; i++) {
        if(arr[i] < current) {
            left.push(arr[i])  //放在左邊
        } else {
            right.push(arr[i]) //放在右邊
        }
    }
    return quickSort(left).concat(current,quickSort(right));
}
  • 希爾排序:不定步數的插入排序,插入排序

  • 口訣: 插冒歸基穩(wěn)定薛耻,快選堆希不穩(wěn)定

image.png

穩(wěn)定性: 同大小情況下是否可能會被交換位置, 虛擬dom的diff营罢,不穩(wěn)定性會導致重新渲染;

4. 遞歸運用(斐波那契數列): 爬樓梯問題

初始在第一級饼齿,到第一級有1種方法(s(1) = 1)饲漾,到第二級也只有一種方法(s(2) = 1), 第三級(s(3) = s(1) + s(2))

function cStairs(n) {
    if(n === 1 || n === 2) {
        return 1;
    } else {
        return cStairs(n-1) + cStairs(n-2)
    }
}

5. 數據樹

  • 二叉樹: 最多只有兩個子節(jié)點
    • 完全二叉樹
    • 滿二叉樹
      • 深度為 h, 有 n 個節(jié)點缕溉,且滿足 n = 2^h - 1
  • 二叉查找樹: 是一種特殊的二叉樹考传,能有效地提高查找效率
    • 小值在左,大值在右
    • 節(jié)點 n 的所有左子樹值小于 n证鸥,所有右子樹值大于 n
image.png
  • 遍歷節(jié)點
    • 前序遍歷
        1. 根節(jié)點
        1. 訪問左子節(jié)點僚楞,回到 1
        1. 訪問右子節(jié)點,回到 1
    • 中序遍歷
        1. 先訪問到最左的子節(jié)點
        1. 訪問該節(jié)點的父節(jié)點
        1. 訪問該父節(jié)點的右子節(jié)點枉层, 回到 1
    • 后序遍歷
        1. 先訪問到最左的子節(jié)點
        1. 訪問相鄰的右節(jié)點
        1. 訪問父節(jié)點泉褐, 回到 1
  • 插入與刪除節(jié)點

6. 天平找次品

有n個硬幣,其中1個為假幣鸟蜡,假幣重量較輕兴枯,你有一把天平,請問矩欠,至少需要稱多少次能保證一定找到假幣?

  • 三等分算法:
      1. 將硬幣分成3組财剖,隨便取其中兩組天平稱量
      • 平衡,假幣在未上稱的一組癌淮,取其回到 1 繼續(xù)循環(huán)
      • 不平衡躺坟,假幣在天平上較輕的一組, 取其回到 1 繼續(xù)循環(huán)

作者:郭東東
鏈接:https://juejin.im/post/5c64d15d6fb9a049d37f9c20
來源:掘金
著作權歸作者所有乳蓄。商業(yè)轉載請聯(lián)系作者獲得授權咪橙,非商業(yè)轉載請注明出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市美侦,隨后出現(xiàn)的幾起案子产舞,更是在濱河造成了極大的恐慌,老刑警劉巖菠剩,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件易猫,死亡現(xiàn)場離奇詭異,居然都是意外死亡具壮,警方通過查閱死者的電腦和手機准颓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棺妓,“玉大人攘已,你說我怎么就攤上這事×埽” “怎么了样勃?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長性芬。 經常有香客問我峡眶,道長,這世上最難降的妖魔是什么批旺? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任幌陕,我火速辦了婚禮,結果婚禮上汽煮,老公的妹妹穿的比我還像新娘搏熄。我一直安慰自己,他們只是感情好暇赤,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布心例。 她就那樣靜靜地躺著,像睡著了一般鞋囊。 火紅的嫁衣襯著肌膚如雪止后。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天溜腐,我揣著相機與錄音译株,去河邊找鬼。 笑死挺益,一個胖子當著我的面吹牛歉糜,可吹牛的內容都是我干的。 我是一名探鬼主播望众,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匪补,長吁一口氣:“原來是場噩夢啊……” “哼伞辛!你這毒婦竟也來了?” 一聲冷哼從身側響起夯缺,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚤氏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踊兜,有當地人在樹林里發(fā)現(xiàn)了一具尸體竿滨,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年润文,在試婚紗的時候發(fā)現(xiàn)自己被綠了姐呐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殿怜。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡典蝌,死狀恐怖,靈堂內的尸體忽然破棺而出头谜,到底是詐尸還是另有隱情骏掀,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布柱告,位于F島的核電站截驮,受9級特大地震影響,放射性物質發(fā)生泄漏际度。R本人自食惡果不足惜葵袭,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乖菱。 院中可真熱鬧坡锡,春花似錦、人聲如沸窒所。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吵取。三九已至禽额,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皮官,已是汗流浹背脯倒。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捺氢,地道東北人藻丢。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像讯沈,于是被迫代替她去往敵國和親郁岩。 傳聞我的和親對象是個殘疾皇子婿奔,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355