按照基本邏輯走:
1,確定狀態
首先分析題目,找核心邏輯。本題中規定不能獲得相鄰位置的資料,同時可以容易想到,越到後面,累加值越大。
由此我們遇到乙個問題,最後取第n個資料,還是取第n-1個資料呢?
只需要比較一下前n個能取得的最大和與前n-1個能取到的最大和,誰大取誰。
此處可以使用乙個陣列d儲存對應第i個位置能取得的最大和;
2,找到轉移公式
比較第n個與第n-1個,將轉換為比較第n-2個與個n-3個。
由此可以得到轉移公式:d[i]=max(d[i-2]+nums[i},d[i-1])。
3,確定初始條件以及邊界條件
顯然第乙個資料與第二個資料,只有一種可能,因此為邊界條件。
4,計算結果。
class solutionreturn lis[len-1];//返回最後的資料}};
5.優化**
從上面**中可以發現,輔助陣列其實不是必要的,每次只需要使用最後的位置,以及它前面的兩個位置,所有使用3個變數即可,空間複雜度可以降為常數級o(1).
刷題筆記 打家劫舍
定義 dp i 為當小偷洗劫了第 i 家的情況下,他能偷竊到的最大金額。定義 money 0 為截止到第 i 2 戶人家,小偷得到的最大盜竊金額,money 1 為截至第 i 1 戶人家的情況。定義 robmax 為他走過第 i 1 家之後,能偷竊到的最大金額。偷竊了第i家就不能偷竊第i 1家,所以...
刷題 動態規劃
動態規劃法 動態規劃求解問題的四個特徵 求乙個問題的最優解 整體的問題的最優解是依賴於各個子問題的最優解 小問題之間還有相互重疊的更小的子問題 從上往下分析問題,從下往上求解問題 題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k ...
動態規劃 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...