關鍵區別
典例代表
動態規劃
子問題相互重疊
斐波那契數列
分而治之
子問題獨立
翻轉二叉樹
1.1 題目描述
1.2 解題思路
輸入:n = 31.3 解題步驟輸出:3
解釋:有3種方法可以爬到樓頂
1 階 + 1 階 + 1階
2 階 + 1 階
1 階 + 2 階
// 空間複雜度:o(n)
function climbstairs(n)
let dp = [1, 1];
for(let i = 2; i <= n; i++)
return dp[n]
}// 空間複雜度:o(1)
function climbstairs(n)
let dp0 = 1, dp1 = 1;
for(let i = 2; i <= n; i++)
return dp1
}
1.4 時間複雜度&空間複雜度2.1 題目描述
2.2 解題思路
輸入:[1,2,3,1]2.3 解題步驟輸出:4
解釋:偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)
偷竊到的最高金額 = 1 + 3 = 4
// 空間複雜度:o(n)
function rob(nums)
const dp = [0, nums[0]];
for(let i = 2; i <= nums.length; i++)
return dp[dp.length - 1]
}// 空間複雜度:o(1)
function rob(nums)
let dp0 = 0, dp1 = nums[0];
for(let i = 2; i <= nums.length; i++)
return dp1
}
2.4 時間複雜度&空間複雜度定義子問題
反覆執行
常見演算法思想之動態規劃 貪婪演算法
最近總是跟動態規劃打交道,索性就將其弄明白一點。所謂的動態規劃並不是一種具體的演算法,而是一種演算法的思想。思想總是抽象的,縹緲的。所以在學習動態規劃的時候會有一種很尷尬的情況,就是感覺這個東西很簡單,但是又不知道自己是不是真的學會了。簡單的來說,動態規劃就是將乙個大問題分解為子問題,然後根據子問題...
演算法基本思想之動態規劃
動態規劃 談到演算法最優解 則首先會想到兩個演算法第乙個是貪心演算法,其次才會是動態規劃 再者從問題解決規模的相似程度來看,可能會引出另外的乙個演算法叫做 分治法 更準確的來講叫做分治思想 有乙個問題是 現在假定學校要從計算機工程系選出本年度的三好學生,假定其名額一共有三個,其中學校計算機工程系的學...
演算法思想 動態規劃
我所理解的動態規劃,其本質是對遞迴的優化。所以一般需要先找出其遞迴方式,才能進一步地優化。但是,只要刷題數量達到了一定程度,就會隱約感覺到有乙個解題模板,只需要按照這個模板去比對各種條件就可以解題。狀態,動態規劃都會使用到輔助陣列來記錄問題的解,這些陣列的下標具有重要作用,一定要弄明白下標究竟表示哪...