今日题目:
今日总结
背包问题的开始。主要理解一维背包如何利用滚动数组。注意遍历顺序。
416. 分割等和子集
要点
- 注意辨别这是01背包问题。
- 对于这种问题要明确target。
- 这里使用一维方式,尤其注意遍历顺序。
代码:
func canPartition(nums []int) bool {
totalSum := 0
for _, item := range nums {
totalSum += item
}
if totalSum % 2 == 1 {
return false
}
target := totalSum / 2
dp := make([]int, target+1)
for i := 0; i <len(nums);i++ {
for j:=target; j >= nums[i];j-- {
dp[j] = max(dp[j], dp[j-nums[i]]+nums[i])
}
}
return dp[target] == target
}
func max(a, b int) int {
if a > b {
return a
}
return b
}