Merge pull request #2365 from RelishCoding/master

优化Java版本滚动数组解法代码
This commit is contained in:
程序员Carl
2023-12-17 10:20:02 +08:00
committed by GitHub

View File

@ -275,19 +275,23 @@ class Solution {
public int findTargetSumWays(int[] nums, int target) { public int findTargetSumWays(int[] nums, int target) {
int sum = 0; int sum = 0;
for (int i = 0; i < nums.length; i++) sum += nums[i]; for (int i = 0; i < nums.length; i++) sum += nums[i];
//如果target过大 sum将无法满足
if ( target < 0 && sum < -target) return 0; //如果target的绝对值大于sum那么是没有方案的
if ((target + sum) % 2 != 0) return 0; if (Math.abs(target) > sum) return 0;
int size = (target + sum) / 2; //如果(target+sum)除以2的余数不为0也是没有方案的
if(size < 0) size = -size; if ((target + sum) % 2 == 1) return 0;
int[] dp = new int[size + 1];
int bagSize = (target + sum) / 2;
int[] dp = new int[bagSize + 1];
dp[0] = 1; dp[0] = 1;
for (int i = 0; i < nums.length; i++) { for (int i = 0; i < nums.length; i++) {
for (int j = size; j >= nums[i]; j--) { for (int j = bagSize; j >= nums[i]; j--) {
dp[j] += dp[j - nums[i]]; dp[j] += dp[j - nums[i]];
} }
} }
return dp[size];
return dp[bagSize];
} }
} }
``` ```