LeetCode 416. 分割等和子集
文章目录
题目描述
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
示例 1:
输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。
LeetCode 416. 分割等和子集
提示:
1 <= nums.length <= 200
1 <= nums[i] <= 100
一、解题关键词
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
package com.datao.arithmetic;
public class CanPartition {
public boolean canPartition(int[] nums) {
int len = nums.length;
if(len < 2){return false;}
int sum = 0,maxNum = 0;
for(int num: nums){
sum +=num;
maxNum = Math.max(maxNum,num);
}
if(sum % 2 != 0){
return false;
}
int target = sum / 2;
if(maxNum > target){
return false;
}
boolean [][] dp = new boolean[len][target + 1];
for(int i = 0;i <len;i++){
dp[i][0] = true;
}
dp[0][nums[0]] = true;
for(int i= 1; i< len; i++){
int num = nums[i];
for(int j = 1;j <= target;j++){
if( j >=num){
dp[i][j] = dp[i - 1][j] | dp[i - 1][j - num];
}else{
dp[i][j] = dp[i - 1][j];
}
}
}
return dp[len - 1][ target];
}
}
2.知识点