1 | 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 |
动态规划
0-1背包问题变种,解题思路如下:
- 如果所有数字的和是奇数,那么这个数组一定不能分成两个等和的数组
- 如果某个数字大于数组中数字和的1/2,那么数组一定不能分成两个等和的数组
使用动态规划解决,这是一个0-1背包问题,背包的容量是数字和的1/2,对于某个数字,如果该数字小于背包的剩余容量,那么可以选择是否将该数字加入背包,对应的状态是:
$dp[i][j]=dp[i-1][j]$ 和$dp[i][j]=dp[i-1][j-nums[i]]$如果两种情况满足一种情况,那么$dp[i][j]$就是$true$
对于某个数字如果该数字大于背包的剩余容量,那么就不能选择当前的数字,不可以将当前的数字加入背包
$dp[i][j]=dp[i-1][j]$
1 | class Solution { |