一些基於歸併排序,自下而上的遞迴題目講解

2021-10-18 04:32:26 字數 3151 閱讀 6817

首先我們看看歸併排序

題目:

思路:

自底向上

1.mergesort函式一直二分到只有乙個元素,

2.merge函式代表合併已經兩個已經排序的陣列(雙指標法)

3.回溯過程在mergesort函式中,回溯也就是自底向上的過程

**:

class

solution

else

}while

(i_start<= i_end)

//這是判斷的

while

(j_start <= j_end)

//輔助空間資料覆蓋到原空間

for(

int i=

0;ivoid

mergesort

(vector<

int>

&arr,

int start,

int end, vector<

int>

&temparr)

//劃分到最後是每乙個裡面只有乙個資料

int mid =

(start + end)/2

;mergesort

(arr,start,mid, temparr)

;mergesort

(arr, mid+

1, end, temparr)

;merge

(arr, start, end, mid, temparr);}

public

: vector<

int>

sortarray

(vector<

int>

& nums)

};

題目

思路

這題運用到了歸併的思想,**中

**:

dfs函式採用自底向上的寫法

自底向上特徵

maxlen代表最大直徑中的結點數 因此最終主函式返回值 是maxlen-1

int

dfs(treenode* root)

函式功能**(返回值)** 代表著當前節點(包含當前節點)以下的最大深度

顯然我們應該更新maxlen的時候是(下面的靈魂手繪)

};題目:

思路:

首先dfs函式

1.採用至下而上的方法,也就是一直遞迴至最終的葉子節點的下乙個節點,然後回溯,

2.主要功能是 求當前節點(包含當前節點)以及下面節點的最長的乙個和(可能是負數) ,也就是說是一天直線,(沒有轉彎)。

3.我們更新ret_max的情況就是

};題目:思路:由於是搜尋數,陰齒自上而下可以解決。

**:

class

solution

if(root-

>val

>val&&root-

>val

>val)

return root;}}

;

題目思路:遞迴+回溯

自下而上(有區域性終止)

1.lowestcommonancestor找到葉子節點的下乙個節點或則p,q節點就返回

2.主要功能是尋找當前節點以及以下節點的是p,q的最近公共祖先

**

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

};

基於歸併排序求小和問題

package smallsum import testarraymethonunit.testarraymethonunit author 黃文偉 description 求小和問題,給定陣列,陣列中每個元素與左邊元素相比,若左邊元素小則計為小和,求出陣列的總小和 例 3左邊沒數,小和0 1左邊為...

遞迴的歸併排序

利用遞迴的特性,先將當前序列的子串行並歸,再並歸當前序列 遞迴結束條件,當前序列的長度為1 並歸前乙個子串行 歸併後乙個子串行 對當前序列進行並歸 遞迴歸併排序演算法 void sort mergesort int arr,int len,int mode 遞迴並歸的執行函式 void sort m...

歸併排序的遞迴實現

歸併排序是一種很經典的演算法。原理就是 把乙個陣列按照五五開的方式分成小塊,然後再乙個乙個的歸併起來。在歸併的過程之中,也要保證兩個區間內的數字在歸併前的時候是有序的,並且在歸併完成之後也是有序的。這樣一直歸併下去,直到資料的區間是陣列頭到陣列尾。include include using name...