鍒嗘不銆佸姩鎬佽鍒掋€佸洖婧€佽椽蹇冧竴閿呯倴

Posted 鍓嶇椋熷爞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鍒嗘不銆佸姩鎬佽鍒掋€佸洖婧€佽椽蹇冧竴閿呯倴相关的知识,希望对你有一定的参考价值。


杩欐槸鍓嶇椋熷爞鐨勭32绡囧師鍒?/strong>  


銆岃鎰熷害锛氿煂燄煂燄煂燄煂燄煂熴€?/strong>


銆屽彛鍛筹細涓滃寳涓€閿呭嚭銆?/strong>

銆岀児楗椂闂达細10min銆?/strong>

鏈枃宸叉敹褰曞湪Github github.com/Geekhyt锛屾劅璋tar銆?/p>

鏁版嵁缁撴瀯涓庣畻娉曠郴鍒椾笓鏍忕鍥涘脊鏉ヨ锛屽線鏈熶笓鏍忛摼鎺ュ涓嬶細




鍒濆鑰呬竴鍚埌绠楁硶鎬濇兂锛屽氨浼氳寰楀畠浠珮娣辫帿娴嬶紝鍙兘鏈涜€屽嵈姝ャ€?/p>

浣嗗鏋滀綘鐪嬭繃銆婁簨瀹炪€嬭繖鏈功锛屼綘灏变笉浼氳澶ц剳涓殑鎯€ф€濈淮鎵€褰卞搷銆傚彧瑕佹垜浠悊瑙g畻娉曟€濇兂鐨勫叧閿偣锛屽鍋氶缁冧範骞跺姞娣辩悊瑙h蹇嗐€傚叾瀹炵畻娉曟€濇兂灏卞儚鍒囪彍涓€鏍风畝鍗曘€?/p>

涓婁竴绡囩畻娉曠郴鍒椾笓鏍忎腑鎴戜滑鎼炴槑鐧戒簡閫掑綊銆傚叾瀹為€掑綊杩欑缂栫▼鎶€宸ф槸寰堝绠楁硶鐨勫熀纭€銆?/p>

杩樼湅杩囩殑鍚屽寤鸿鍏堢Щ姝ヨ繖绡囦笓鏍?/p>

姣斿鏈枃璁插埌鐨勮繖鍑犵绠楁硶鎬濇兂锛屽ぇ閮ㄥ垎閮芥槸鍩轰簬閫掑綊鎬濇兂鍩虹涓婄殑銆?/p>

涓€鍙ヨ瘽鐞嗚В鍥涚绠楁硶鎬濇兂

鍒嗘不锛氬垎鑰屾不涔嬶紝鍏堣В鍐冲瓙闂锛屽啀灏嗗瓙闂鐨勮В鍚堝苟姹傚嚭鍘熼棶棰樸€?/code>

璐績锛氫竴鏉¤矾璧板埌榛戯紝閫夋嫨褰撲笅灞€閮ㄦ渶浼樼殑璺嚎锛屾病鏈夊悗鎮旇嵂銆?/code>

鍥炴函锛氫竴鏉¤矾璧板埌榛戯紝鎵嬫彙鍚庢倲鑽紝鍙互鏃犳暟娆¢噸鏉ャ€?鑻遍泟鑱旂洘鑹惧厠澶ф嫑鏃犲喎鍗?銆?/code>

鍔ㄦ€佽鍒掞細涓婂笣瑙嗚锛屾墜鎻℃棤鏁板钩琛屽畤瀹欑殑鍘嗗彶瀛樻。锛屽悓鏃跺彂灞曞嚭鏃犳暟涓湭鏉ャ€?/code>

鎺ヤ笅鏉ユ垜浠竴璧峰簴涓佽В鐗涳紝灏嗚繖鍑犵绠楁硶鎬濇兂涓€閿呯倴銆?/p>

鍒嗘不绠楁硶 Divide and Conquer

鍒嗘不绠楁硶鎬濇兂寰堝ぇ绋嬪害涓婃槸鍩轰簬閫掑綊鐨勶紝涔熸瘮杈冮€傚悎鐢ㄩ€掑綊鏉ュ疄鐜般€傞【鍚嶆€濅箟锛屽垎鑰屾不涔嬨€備竴鑸垎涓轰互涓嬩笁涓繃绋嬶細

  • 鍒嗚В锛氬皢鍘熼棶棰樺垎瑙f垚涓€绯诲垪瀛愰棶棰樸€?
  • 瑙e喅锛氶€掑綊姹傝В鍚勪釜瀛愰棶棰橈紝鑻ュ瓙闂瓒冲灏忥紝鍒欑洿鎺ユ眰瑙c€?
  • 鍚堝苟锛氬皢瀛愰棶棰樼殑缁撴灉鍚堝苟鎴愬師闂銆?

姣旇緝缁忓吀鐨勫簲鐢ㄥ氨鏄?code class="mq-59">褰掑苟鎺掑簭 (Merge Sort) 浠ュ強蹇€熸帓搴?(Quick Sort) 绛夈€傛垜浠潵浠庡綊骞舵帓搴忕悊瑙e垎娌绘€濇兂锛屽綊骞舵帓搴忓氨鏄皢寰呮帓搴忔暟缁勪笉鏂簩鍒嗕负瑙勬ā鏇村皬鐨勫瓙闂澶勭悊锛屽啀灏嗗鐞嗗ソ鐨勫瓙闂鍚堝苟璧锋潵銆?/p>

涓婁唬鐮併€?/p>

const mergeSort = function(arr{
    const len = arr.length;
    if (len > 1) {
        // 瀵瑰崐鍒嗚В
        const middle = Math.floor(len / 2);
        const left = arr.slice(0, middle);
        const right = arr.slice(middle, len);
        let i = 0
        let j = 0;
        let k = 0;
        // 鍒嗗埆瀵瑰乏鍙宠繘琛屾帓搴?/span>
        mergeSort(left);
        mergeSort(right);
        while(i < left.length && j < right.length) {
            if (left[i] < right[j]) {
                arr[k] = left[i];
                i++;
            } else {
                arr[k] = right[j];
                j++;
            }
            k++;
        }
        // 妫€鏌ヤ綑椤?/span>
        while(i < left.length) {
            arr[k] = left[i];
            i++;
            k++;
        }
        while(j < right.length) {
            arr[k] = right[j];
            j++;
            k++;
        }
    }
    return arr;
}

澶嶆潅搴﹀垎鏋?/span>

  • 鏃堕棿澶嶆潅搴︼細O(nlogn)
  • 绌洪棿澶嶆潅搴︼細O(n)

鍔ㄦ€佽鍒? Dynamic Programming

LeetCode鐪熼

70. 鐖ゼ姊?nbsp;

https://leetcode-cn.com/problems/climbing-stairs/

铏界劧鍔ㄦ€佽鍒掔殑鏈€缁堢増鏈?(闄嶇淮鍐嶅幓缁? 澶ч兘涓嶆槸閫掑綊锛屼絾瑙i鐨勮繃绋嬭繕鏄寮€涓嶉€掑綊鐨勩€傛柊鎵嬪彲鑳戒細瑙夊緱鍔ㄦ€佽鍒掓€濇兂鎺ュ彈璧锋潵姣旇緝闅撅紝纭疄锛屽姩鎬佽鍒掓眰瑙i棶棰樼殑杩囩▼涓嶅お绗﹀悎浜虹被甯歌鐨勬€濈淮鏂瑰紡锛屾垜浠渶瑕佸垏鎹㈡垚鏈哄櫒鎬濈淮銆?/p>

浣跨敤鍔ㄦ€佽鍒掓€濇兂瑙i锛岄鍏堣鏄庣‘鍔ㄦ€佽鍒掔殑涓夎绱犮€?/p>

鍔ㄦ€佽鍒掍笁瑕佺礌

  • 閲嶅彔瀛愰棶棰?/code>
  • 鏈€浼樺瓙缁撴瀯
  • 鐘舵€佽浆绉绘柟绋?/code>

閲嶅彔瀛愰棶棰?/h4>

鍒囨崲鏈哄櫒鎬濈淮锛岃嚜搴曞悜涓婃€濊€冦€?/code>

鐖 n 闃舵ゼ姊殑鏂规硶鏁伴噺锛岀瓑浜庝袱閮ㄥ垎涔嬪拰锛?/p>

  • 鐖笂 n-1 闃舵ゼ姊殑鏂规硶鏁伴噺
  • 鐖笂 n-2 闃舵ゼ姊殑鏂规硶鏁伴噺

鏈€浼樺瓙缁撴瀯

瀛愰棶棰樼殑鏈€浼樿В鑳藉鎺ㄥ嚭鍘熼棶棰樼殑浼樿В銆?/code>

鐘舵€佽浆绉绘柟绋?/h4>

dp[n] = dp[n-1] + dp[n-2]

鍏峰涓夎绱狅紝纭杈圭晫鏉′欢锛屽垵濮嬪寲鐘舵€侊紝寮€濮嬪垏鑿滐細

  • dp[0] = 1
  • dp[1] = 1
const climbStairs = function(n{
    const dp = [];
    dp[0] = 1;
    dp[1] = 1;
    for (let i = 2; i <= n; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    return dp[n];
};

澶嶆潅搴﹀垎鏋?/h4>
  • 鏃堕棿澶嶆潅搴︼細O(n)
  • 绌洪棿澶嶆潅搴︼細O(n)

浼樺寲

鍦ㄦ鍩虹涓婏紝鎴戜滑杩樺彲浠ラ€氳繃鍘嬬缉绌洪棿鏉ュ绠楁硶杩涜浼樺寲銆傚洜涓?dp[i]鍙笌 dp[i-1] 鍜?dp[i-2] 鏈夊叧锛屾病鏈夊繀瑕佸瓨鍌ㄦ墍鏈夊嚭鐜拌繃鐨?dp 椤癸紝鍙敤涓や釜涓存椂鍙橀噺鍘诲瓨鍌ㄨ繖涓や釜鐘舵€佸嵆鍙€?/p>

const climbStairs = function(n{
    let a1 = 1;
    let a2 = 1;
    for (let i = 2; i <= n; i++) {
        [a1, a2] = [a2, a1 + a2];
    }
    return a2;
}

澶嶆潅搴﹀垎鏋?/h4>
  • 鏃堕棿澶嶆潅搴︼細O(n)
  • 绌洪棿澶嶆潅搴︼細O(1)

璐績绠楁硶 Greedy

鏈€杩戞煇闊冲緢鐏殑璐績鍦熷懗鎯呰瘽

鍠傦紝涓嶆槸鍚с€備粖澶╁枬浜嗚剦鍔ㄥ晩锛屽悆浜嗘灉鍐诲晩锛屼絾鏄紝杩樻槸蹇嶄笉浣忓浣犲績鍔ㄥ晩銆?/p>

鍥炲埌绠楁硶涓紝璐績绠楁硶鏄?code class="mq-186">鍔ㄦ€佽鍒?/code>绠楁硶鐨勪竴涓瓙闆嗭紝鍙互鏇撮珮鏁堣В鍐充竴閮ㄥ垎鏇寸壒娈婄殑闂銆傚疄闄呬笂锛岀敤璐績绠楁硶瑙e喅闂鐨勬€濊矾锛屽苟涓嶆€昏兘缁欏嚭鏈€浼樿В銆傚洜涓哄畠鍦ㄦ瘡涓€姝ョ殑鍐崇瓥涓紝閫夋嫨鐩墠鏈€浼樼瓥鐣ワ紝涓嶈€冭檻鍏ㄥ眬鏄笉鏄渶浼樸€?/p>

LeetCode鐪熼

LeetCode 455. 鍒嗗彂楗煎共

https://leetcode-cn.com/problems/assign-cookies/description/

鎬濊矾

璐績绠楁硶+鍙屾寚閽堟眰瑙c€?/p>

  • 缁欎竴涓瀛愮殑楗煎共搴斿綋灏介噺灏忓苟涓旇兘婊¤冻瀛╁瓙锛屽ぇ鐨勭暀鏉ユ弧瓒宠儍鍙eぇ鐨勫瀛?
  • 鍥犱负鑳冨彛灏忕殑瀛╁瓙鏈€瀹规槗寰楀埌婊¤冻锛屾墍浠ヤ紭鍏堟弧瓒宠儍鍙e皬鐨勫瀛愰渶姹?
  • 鎸夌収浠庡皬鍒板ぇ鐨勯『搴忎娇鐢ㄩゼ骞插皾璇曟槸鍚﹀彲婊¤冻鏌愪釜瀛╁瓙
  • 褰撻ゼ骞?j >= 鑳冨彛 i 鏃讹紝楗煎共婊¤冻鑳冨彛锛屾洿鏂版弧瓒崇殑瀛╁瓙鏁板苟绉诲姩鎸囬拡   i++ j++ res++
  • 褰撻ゼ骞?j < 鑳冨彛 i 鏃讹紝楗煎共涓嶈兘婊¤冻鑳冨彛锛岄渶瑕佹崲澶х殑 j++

鍏抽敭鐐?/span>

灏嗛渶姹傚洜瀛?g 鍜?s 鍒嗗埆浠庡皬鍒板ぇ杩涜鎺掑簭锛屼娇鐢ㄨ椽蹇冩€濇兂閰嶅悎鍙屾寚閽堬紝姣忎釜楗煎共鍙皾璇曚竴娆★紝鎴愬姛鍒欐崲涓嬩竴涓瀛愭潵灏濊瘯銆?/p>

澶嶆潅搴﹀垎鏋?/span>

  • 鏃堕棿澶嶆潅搴︼細O(nlogn)
  • 绌洪棿澶嶆潅搴︼細O(1)
const findContentChildren = function (g, s{
    g = g.sort((a, b) => a - b);
    s = s.sort((a, b) => a - b);
    let gi = 0// 鑳冨彛鍊?/span>
    let sj = 0// 楗煎共灏哄
    let res = 0;
    while (gi < g.length && sj < s.length) {
        if (s[sj] >= g[gi]) {
            gi++;
            sj++;
            res++;
        } else {
            sj++;
        }
    }
    return res;
};

鍥炴函绠楁硶 Backtracking

鍥炴函绠楁硶鏈川涓婂氨鏄灇涓撅紝浣跨敤鎽哥潃鐭冲ご杩囨渤鐨勬煡鎵剧瓥鐣ワ紝杩樺彲浠ラ€氳繃鍓灊灏戣蛋鍐ゆ瀴璺€?/code>

LeetCode鐪熼

https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/

鎬濊矾

浣跨敤鍥炴函娉曡繘琛屾眰瑙o紝鍥炴函鏄竴绉嶉€氳繃绌蜂妇鎵€鏈夊彲鑳芥儏鍐垫潵鎵惧埌鎵€鏈夎В鐨勭畻娉曘€傚鏋滀竴涓€欓€夎В鏈€鍚庤鍙戠幇骞朵笉鏄彲琛岃В锛屽洖婧畻娉曚細鑸嶅純瀹冿紝骞跺湪鍓嶉潰鐨勪竴浜涙楠ゅ仛鍑轰竴浜涗慨鏀癸紝骞堕噸鏂板皾璇曟壘鍒板彲琛岃В銆傜┒鍏舵湰璐紝鍏跺疄灏辨槸鏋氫妇銆?/p>

濡傛灉娌℃湁鏇村鐨勬暟瀛楅渶瑕佽杈撳叆锛岃鏄庡綋鍓嶇殑缁勫悎宸茬粡浜х敓銆?/p>

濡傛灉杩樻湁鏁板瓧闇€瑕佽杈撳叆锛?/p>

  • 閬嶅巻涓嬩竴涓暟瀛楁墍瀵瑰簲鐨勬墍鏈夋槧灏勭殑瀛楁瘝
  • 灏嗗綋鍓嶇殑瀛楁瘝娣诲姞鍒扮粍鍚堟渶鍚庯紝涔熷氨鏄? str + tmp[r]

鍏抽敭鐐?/span>

鍦╢or寰幆涓皟鐢ㄩ€掑綊銆?/p>

澶嶆潅搴﹀垎鏋?/span>

N+M 鏄緭鍏ユ暟瀛楃殑鎬绘暟

  • 鏃堕棿澶嶆潅搴︼細O(3^N * 4^M)
  • 绌洪棿澶嶆潅搴︼細O(3^N * 4^M)
const letterCombinations = function (digits{
    if (!digits) {
        return [];
    }
    const len = digits.length;
    const map = new Map();
    map.set('2''abc');
    map.set('3''def');
    map.set('4''ghi');
    map.set('5''jkl');
    map.set('6''mno');
    map.set('7''pqrs');
    map.set('8''tuv');
    map.set('9''wxyz');
    const result = [];

    function generate(i, str{
        if (i == len) {
            result.push(str);
            return;
        }
        const tmp = map.get(digits[i]);
        for (let r = 0; r < tmp.length; r++) {
            generate(i + 1, str + tmp[r]);
        }
    }
    generate(0'');
    return result;
};

鉂わ笍鐖卞績涓夎繛鍑?/span>

1.鐪嬪埌杩欓噷浜嗗氨鐐逛釜鍦ㄧ湅鏀寔涓嬪惂锛屼綘鐨?span class="mq-303">銆屽湪鐪嬨€?/strong>鏄垜鍒涗綔鐨勫姩鍔涖€?/p>

3.鏈枃宸叉敹褰曞湪鍓嶇椋熷爞Github github.com/Geekhyt锛屾眰涓皬鏄熸槦锛屾劅璋tar銆?/p>


鎺橀噾锛氱娆у反


鐭ヤ箮锛氱娆у反


杩欐槸涓€涓粓韬涔犵殑鐢蜂汉锛屼粬鍦ㄥ潥鎸佽嚜宸辩儹鐖辩殑浜嬫儏锛屾杩庡姞鍏ュ墠绔鍫傦紝鍜岃繖涓敺浜轰竴璧峰紑蹇冪殑鍙樿儢锝?/span>


鎺ㄨ崘闃呰锛?/span>



  鍦ㄧ湅鍜岃浆鍙戞槸鑾ぇ榧撳姳鉂わ笍


以上是关于鍒嗘不銆佸姩鎬佽鍒掋€佸洖婧€佽椽蹇冧竴閿呯倴的主要内容,如果未能解决你的问题,请参考以下文章

銆怢eetCode銆戝姩鎬佽鍒掞紙涓嬬瘒鍏?9棰橈級

銆愩€恏enuacm2016绾ф殤鏈熻缁冦€戝姩鎬佽鍒掍笓棰?D銆慦riting Code

濡備綍鍚戜竴涓洓宀佸皬瀛╄В閲婂姩鎬佽鍒掞紵

鍥炴函绠楁硶鍜屽姩鎬佽鍒掞紝鍒板簳璋佹槸璋佺埞锛熸枃鏈€佷功

鏄撻敊鏄撴贩娣嗙煡璇嗙偣璁茶В绯诲垪锛堜節锛夆€斿缓绔嬪姩鎬佽鍒掓ā鍨嬬殑鍩烘湰姝ラ

(c)2006-2024 SYSTEM All Rights Reserved IT常识