複習一 分治演算法

2021-08-02 10:56:41 字數 830 閱讀 8807

臨近期末,把之前做過的題目(有部分是未做過的)重新做一遍,整合到一起,為了省時間,就不貼**了,只分析思路。

分治演算法題目:

1、search a 2d matrix ii:在乙個每行每列都有序的矩陣中搜尋某一數字。

2、kth largest element in an array:找到陣列裡第k大元素。

可以參考quick select演算法,但是我偷懶使用了heap,大端堆的頂部是最大元素,可以根據k,進行幾次pop_heap操作得到想要的kth。

3、majority element:找到陣列裡出現次數 > n/2 的元素。

原先是想另開乙個陣列tmp,利用tmp[nums[i]]++去計數每個元素出現次數。但是有乙個問題——並不知道tmp的大小,因為nums[i]未知,而且可能很大。於是想到了unordered_map,空間o(n),查詢時間o(1)的容器,利用nums[i]得到屬於它的乙個容器(中間經過雜湊變換,不需要擔心tmp的陣列越界情況)。

之後遍歷unordered_map得到 > n/2 的元素,返回即可。

4、maximum subrray:找到陣列的和最大的子串。

雖然是分治專題,但是這道題用動態規劃解起來很快。陣列re[i]表示以nums[i]結尾的子串的最大和。re[i]= max(re[i-1]+ nums[i], nums[i])。

遍歷返回最大的re[i]即可。

演算法學習 一 分治演算法

演算法學習 一 分治演算法 1.1 引言 當我們在處理一些問題時,由於這些問題要處理的資料很多,或者求解的過程很複雜,這時如果直接求解將會在時間上花費很長時間,或者根本沒辦法求出,對於這一類的問題,我們可以先把它分解為幾個子問題,找到並求出這些子問題的相應的解,然後再用適當的方法將他們組合成整個問題...

五大常用演算法之一 分治演算法

一 基本概念 在電腦科學中,分治法是一種很重要的演算法。字面上的解釋是 分而治之 就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題 直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個技巧是很多高效演算法的基礎,如排序演算法 快速排序,歸併排序 傅利...

五大常用演算法之一 分治演算法

一 基本概念 在電腦科學中,分治法是一種很重要的演算法。字面上的解釋是 分而治之 就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題 直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個技巧是很多高效演算法的基礎,如排序演算法 快速排序,歸併排序 傅利...