首先我們看看歸併排序
題目:
思路:
自底向上
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...