本週小結!(回溯演算法系列三)

2021-10-10 19:49:33 字數 1760 閱讀 3598

本文 已經收錄,裡面還有leetcode刷題攻略、各個型別經典題目刷題順序、思維導圖,可以fork到自己倉庫,有空看一看一定會有所收穫,如果對你有幫助也給乙個star支援一下吧!

在回溯演算法:求子集問題(二)中,開始針對子集問題進行去重。

本題就是回溯演算法:求子集問題!的基礎上加上了去重,去重我們在回溯演算法:求組合總和(三)也講過了。

所以本題對大家應該並不難。

樹形結構如下:

在回溯演算法:遞增子串行中,處處都能看到子集的身影,但處處是陷阱,值得好好琢磨琢磨!

樹形結構如下:

詳細在本週小結!(回溯演算法系列三)續集中給出了介紹!

我們已經分析了組合問題,分割問題,子集問題,那麼回溯演算法:排列問題! 又不一樣了。

排列是有序的,也就是說[1,2] 和[2,1] 是兩個集合,這和之前分析的子集以及組合所不同的地方。

可以看出元素1在[1,2]中已經使用過了,但是在[2,1]中還要在使用一次1,所以處理排列問題就不用使用startindex了。

如圖:

排列問題也要去重了,在回溯演算法:排列問題(二)中又一次強調了「樹層去重」和「樹枝去重」。

樹形結構如下:

這道題目神奇的地方就是used[i - 1] == false也可以,used[i - 1] == true也可以!

我就用輸入: [1,1,1] 來舉乙個例子。

樹層上去重(used[i - 1] == false),的樹形結構如下:

樹枝上去重(used[i - 1] == true)的樹型結構如下:

可以清晰的看到使用(used[i - 1] == false),即樹層去重,效率更高!

之前並沒有分析各個問題的時間複雜度和空間複雜度,這次來說一說。

這塊網上的資料魚龍混雜,一些所謂的經典面試書籍根本不講回溯演算法,演算法書籍對這塊也避而不談,感覺就像是演算法裡模糊的邊界。

子集問題分析:

排列問題分析:

組合問題分析:

一般說道回溯演算法的複雜度,都說是指數級別的時間複雜度,這也算是乙個概括吧!

本週我們對子集問題進行了去重,然後介紹了和子集問題非常像的遞增子串行,如果還保持慣性思維,這道題就可以掉坑里。

接著介紹了排列問題!,以及對排列問題如何進行去重。

最後我補充了子集問題,排列問題和組合問題的效能分析,給大家提供了回溯演算法複雜度的分析思路。

就醬,「**隨想錄」一直都是乾貨滿滿,值得介紹給身邊的朋友們!

如果感覺對你有幫助,不要吝嗇給乙個?吧!

leetcode 本週小結!(貪心演算法系列四)

本文 已經收錄,裡面還有leetcode刷題攻略 各個型別經典題目刷題順序 思維導圖,可以fork到自己倉庫,有空看一看一定會有所收穫,如果對你有幫助也給乙個star支援一下吧!在貪心演算法 用最少數量的箭引爆氣球中,我們開始講解了重疊區間問題,用最少的弓箭射爆所有氣球,其本質就是找到最大的重疊區間...

手把手帶你學演算法 本週小結!(貪心演算法系列三)

本文 已經收錄,裡面還有leetcode刷題攻略 各個型別經典題目刷題順序 思維導圖,可以fork到自己倉庫,有空看一看一定會有所收穫,如果對你有幫助也給乙個star支援一下吧!本週開始恢復了題目系列。對於貪心,大多數同學都會感覺,不就是常識嘛,這算啥演算法,那麼本週的題目就可以帶大家初步領略一下貪...

總結 貪心演算法 本週小結!(貪心演算法系列四)

在貪心演算法 用最少數量的箭引爆氣球中,我們開始講解了重疊區間問題,用最少的弓箭射爆所有氣球,其本質就是找到最大的重疊區間。按照左邊界經行排序後,如果氣球重疊了,重疊氣球中右邊邊界的最小值 之前的區間一定需要乙個弓箭 如圖 模擬射氣球的過程,很多同學真的要去模擬了,實時把氣球從陣列中移走,這麼寫的話...