国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

LeetCode 之 JavaScript 解答第21題 —— 合并兩個有序鏈表(Merge Two

wdzgege / 1093人閱讀

摘要:什么意思呢比如上方合并鏈表的代碼,分別明確函數的參數和返回值是什么參數是兩個合并的鏈表結點頭結點。返回值是合并后的鏈表。

Time:2019/4/9
Title: Merge Two Sorted Lists
Difficulty: Easy
Author: 小鹿

題目:Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

Example:

Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
Solve:
▉ 算法思路

1、正常思路,循環遍歷迭代比較大小,每取出一個數據,將小數據加入到額外的數組中去,直到比較完畢,將其中一個剩余的數組追加到額外的數組尾部。

2、遞歸思路,滿足遞歸的三個條件:

將問題能不能化為子問題去解決?

子問題的解決方式是否和總問題相似?

是否有終止條件?

▉ 遞歸實現
var mergeTwoLists = function(l1, l2) {
    let result = null;
    //終止條件
    if(l1 == null) return l2;
    if(l2 == null) return l1;

    //判斷數值大小遞歸
    if(l1.val < l2.val){
        result = l1;
        result.next = mergeTwoLists(l1.next,l2);
    }else{
        result = l2;
        result.next = mergeTwoLists(l2.next,l1);
    }

    //返回結果
    return result;
};
▉ 怎么理解遞歸?
其實遞歸最難的就是我們應該怎么去理解它,當我們完全理解了遞歸之后,就會發現遞歸非常方便,代碼簡潔。

我們經常理解遞歸會陷入到遞歸的細節上去,往往只遞,歸的時候就完全模糊了,我也試著找了網上的關于遞歸解釋的,這么說吧,關于遞歸理解和使用,只有總結出自己的一套理解方法,才能真正的掌握遞歸,下面總結一下我自己理解的遞歸。

1、明確遞歸可以解決什么問題,也就是上邊所講到的解決的問題應該滿足遞歸的三個條件。詳細分開講解:

將問題劃分為子問題:如果我們判斷該問題可以用遞歸解決了,比如合并兩個鏈表中比較結點大小,然后加入到新鏈表,然后在比較下一個結點大小,這個過程就是一個將問題化為子問題的過程,比較當前結點大小先要比較后一個節點與當前結點的大小,可以理解成“遞”的過程。(就好比一扇扇包含關系的大門,問一共有幾所大門,你拿著要是去打開,發現里邊還有一扇,然后再打開,發現還有一扇,直到最后一扇。通常我們使用迭代循環來解決這個問題,就好比打開一扇大門就 加一;而遞歸要做的就是當大門全部打開的時候,從里往外走關閉大門的時候統計大門的數量)

尋找終止條件:遞歸必須有個終止條件,也就是子問題的解決方案,如果沒有終止條件,問題就不會得到解答。如上方合并鏈表的時候,經過遞歸不斷的比較下一結點,知道其中一個鏈表比較完畢為空了,結果返回第二個鏈表,也就是達到了終止的條件,開始“歸”的過程。

遞推公式:你會問了,怎么寫出遞推公式呢?既然終止條件有了,那我們開始找出遞歸公式,下面是我自己總結出來的經驗。

① 一看參數和 return。什么意思呢?比如上方合并鏈表的代碼,分別明確函數的參數和返回值是什么?參數是兩個合并的鏈表結點頭結點。返回值是合并后的鏈表。

② 二湊參數和return。就是說我們要去按照參數和返回值去用遞歸偽造它,比較完成第一個結點,當然傳入第二個節點,返回第一個結點到新鏈表尾部,那么遞歸就會返回新鏈表的下一結點。要屏蔽掉遞歸的細節,只看參數和返回值。

▉ 遞歸缺點
有時候問題可以使用遞歸,但是由于遞歸的缺點會放棄使用。

1、遞歸警惕堆棧溢出。

2、警惕遞歸重復元素計算。

3、遞歸的高空間復雜度。

▉ 怎么正確寫出遞歸代碼?
1、將問題化為子問題。

2、解決子問題。

3、尋找終止條件。

4、寫出遞歸公式。

5、將遞推公式轉化為代碼。

歡迎一起加入到 LeetCode 開源 Github 倉庫,可以向 me 提交您其他語言的代碼。在倉庫上堅持和小伙伴們一起打卡,共同完善我們的開源小倉庫!
Github:https://github.com/luxiangqia...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103412.html

相關文章

  • LeetCode JavaScript 解答23 —— 合并K個有序鏈表Merge K S

    摘要:分治算法遞歸每層操作分解將原問題分解成一系列的子問題。分治算法滿足的條件可分解原問題與分解成的小問題具有相同的模式無關聯原問題分解成的子問題可以獨立求解,子問題之間沒有相關性,這一點是分治算法跟動態規劃的明顯區別。 Time:2019/4/10Title: Merge K Sorted ListsDifficulty: DifficultyAuthor: 小鹿 題目:Merge K...

    zhou_you 評論0 收藏0
  • LeetCode 21合并兩個有序鏈表 Merge Two Sorted Lists

    摘要:將兩個有序鏈表合并為一個新的有序鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。無非是依次將兩個鏈表每個節點的值對比,取出值較小的節點,添加到新鏈表末尾。將剩余鏈表傳回遞歸函數。 將兩個有序鏈表合并為一個新的有序鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 Merge two sorted linked lists and return it as a n...

    LeviDing 評論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月下半月匯總(100 攻略)

    摘要:月下半旬攻略道題,目前已攻略題。目前簡單難度攻略已經到題,所以后面會調整自己,在刷算法與數據結構的同時,攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區別...

    tain335 評論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月上半月匯總(55 攻略)

    摘要:微信公眾號記錄截圖記錄截圖目前關于這塊算法與數據結構的安排前。已攻略返回目錄目前已攻略篇文章。會根據題解以及留言內容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。本許可協議授權之外的使用權限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...

    warmcheng 評論0 收藏0
  • leetcode21 Merge Two Sorted Lists 將兩個有序鏈表組合成一個新的有

    摘要:題目要求翻譯過來就是將兩個有序的鏈表組合成一個新的有序的鏈表思路一循環在當前兩個鏈表的節點都是非空的情況下比較大小,較小的添入結果鏈表中并且獲得較小節點的下一個節點。 題目要求 Merge two sorted linked lists and return it as a new list. The new list should be made by splicing togeth...

    BothEyes1993 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<