當前位置:
首頁 >
【LeetCode笔记】416. 分割等和子集(Java、动态规划、背包问题、滚动数组)
發(fā)布時間:2024/7/23
50
豆豆
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】416. 分割等和子集(Java、动态规划、背包问题、滚动数组)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 思路 && 代碼
- 1. 動態(tài)規(guī)劃 O(nc) 、O(nc)
- 2. 結(jié)合滾動數(shù)組 O(nc)、O(c)
- 二刷
打卡第十四天~熬夜也得把題目補上= =
題目描述
- 初看題目,想到的思路是用記憶化DFS來找結(jié)果來著。。看了題解才知道是背包問題= =
思路 && 代碼
1. 動態(tài)規(guī)劃 O(nc) 、O(nc)
- 參考了liweiwei的這篇題解,里面給背包問題講了一些相關(guān)知識~
- 時空復雜度: n 是 nums 的長度,c 是 sum 的長度。
- dp[i][j]:從[0, i]下標組成的數(shù)集里選取元素相加,能否構(gòu)成 j 。
- 狀態(tài)轉(zhuǎn)移方程:【[0, i - 1] 可以構(gòu)成 j】| 【[0, i - 1] 可以構(gòu)成 j - nums[i]】,滿足任一種情況,都可以保證 dp[i][j] == true,因此這里采用 |=
2. 結(jié)合滾動數(shù)組 O(nc)、O?
- 在1的基礎(chǔ)上,通過滾動數(shù)組來減少空間復雜度。在劍指Offer 47 禮物的最大值里,也有用到這個方法~。
- 加入 if(dp[target]) 的判斷實現(xiàn)剪枝效果,可以打敗98%+,這里為了看起來簡潔就不加上了
- 注意:逆序是為了達到無后效性的效果。如果正序,會導致后面的列用到的不是上一行的結(jié)果,而是當前行的結(jié)果,會導致出錯(可以畫圖理解一下,或者看上面1提到的題解的解釋)
二刷
背包!
你就說你選不選吧(指元素)
你要能 true 我肯定選啊
- O(nc)、O(nc)
- 滾動數(shù)組:逆序降低空間復雜度
總結(jié)
以上是生活随笔為你收集整理的【LeetCode笔记】416. 分割等和子集(Java、动态规划、背包问题、滚动数组)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java truevfs_Java-Ap
- 下一篇: 【LeetCode笔记 - 每日一题】3