代码随想录算法训练营第四十二天 | 分割等和子集
● 今日学习的文章链接和视频链接
● 看到题目的第一想法
难!背包!
● 看完代码随想录之后的想法
难!背包!
● 实现过程中遇到哪些困难
寒假要好好补背包问题
● 解题代码
-
点击查看代码
class Solution { public boolean canPartition(int[] nums) { if(nums == null || nums.length == 0) return false; int n = nums.length; int sum = 0; for(int num : nums) { sum += num; } //总和为奇数,不能平分 if(sum % 2 != 0) return false; int target = sum / 2; int[] dp = new int[target + 1]; for(int i = 0; i < n; i++) { for(int j = target; j >= nums[i]; j--) { //物品 i 的重量是 nums[i],其价值也是 nums[i] dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]); } //剪枝一下,每一次完成內層的for-loop,立即檢查是否dp[target] == target,優化時間複雜度(26ms -> 20ms) if(dp[target] == target) return true; } return dp[target] == target; } }
● 今日收获,学习时长
今日收获:且学且珍惜
学习时长:1h
浙公网安备 33010602011771号