给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

注意:

每个数组中的元素不会超过 100
数组的大小不会超过 200
示例 1:

输入: [1, 5, 11, 5]

输出: true

解释: 数组可以分割成 [1, 5, 5] 和 [11].

示例 2:

输入: [1, 2, 3, 5]

输出: false

解释: 数组不能分割成两个元素和相等的子集.

思路:从数组中选取一些元素使他的和等于总和的一半,类似于背包问题

通过dp[][]来记录状态

dp[i][j]:表示选取范围为[0,i-1]的条件下和为j的情况

dp[i][j]状态与两个元素有关

1. dp[i-1][j],在[0,i-1]的情况下选取的元素和为j,不选取第i个元素,和仍为j

2. dp[i-1][j-nums[i]],选取第i个元素,那么如果之前存在和为j-nums[i]的情况,就说明和为j的情况存在

提交的代码:

class Solution {

public boolean canPartition(int[] nums) {

int i,sum=0;

for(i=0;i<nums.length;i++)

{

sum+=nums[i];

}

if(sum%2!=0)

{

return false;

}

int target = sum/2;

boolean dp[][] = new boolean[nums.length][target+1];

if(nums[0]<=target)

{

dp[0][nums[0]] = true;

}

for(i=1;i<nums.length;i++)

{

for(int j=0;j<=target;j++)

{

dp[i][j] = dp[i-1][j];

if(j>=nums[i])

{

dp[i][j] = dp[i-1][j] || dp[i-1][j-nums[i]];

}

}

}

for(i=0;i<nums.length;i++)

{

if(dp[i][target])

{

return true;

}

}

return false;

}

}

Leetcode--416. 分割等和子集相关推荐

  1. LeetCode 416 分割等和子集

    LeetCode 416 分割等和子集 题目链接 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会 ...

  2. leetcode - 416. 分割等和子集

    416. 分割等和子集 -------------------------------------------- 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和 ...

  3. LeetCode 416. 分割等和子集 【c++/java详细题解】

    来自专栏<LeetCode高频面试题> 欢迎订阅 目录 1.题目 2.思路 3.二维c++代码 4.二维java代码 5.一维优化 6.一维c++代码 7.一维java代码 1.题目 给你 ...

  4. Java实现 LeetCode 416 分割等和子集

    416. 分割等和子集 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: ...

  5. [动态规划] leetcode 416. 分割等和子集

    问题描述:    分割等和子集:给你一个只包含正整数的非空数组 nums .请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等.   例子:输入nums = {1, 5, 11 , 5 ...

  6. leetcode 416. 分割等和子集

    分割等和子集题解集合 DFS 记忆化搜索 记忆化搜索的另一种写法 动态规划 「滚动数组」解法 「一维空间优化」解法 DFS 思路 题意就是:给你一个非空数组,和为sum,你能否找到一个子序列,和为su ...

  7. LeetCode 416. 分割等和子集(动态规划)

    1. 题目 给定一个只包含正整数的非空数组. 是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [ ...

  8. LeetCode 416. 分割等和子集(动态规划)(0-1背包)

    题目描述 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, ...

  9. LeetCode #416 分割等和子集

    题目: 给你一个 只包含正整数 的 非空 数组 nums .请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 示例 1: 输入:nums = [1,5,11,5] 输出:true ...

  10. LeetCode | 416.分割等和子集

    给你一个 只包含正整数 的 非空 数组 nums .请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 示例 1:输入:nums = [1,5,11,5] 输出:true 解释:数组 ...

最新文章

  1. mysql 断开的管道_ClientAbortException: java.net.SocketException: 断开的管道
  2. 【吐血整理】java正则表达式详解
  3. [SQL] 外卖系统数据库设计
  4. phpMyAdmin import.php 跨站脚本漏洞
  5. Android中的Touch事件
  6. Servlet读取文件的最好的方式
  7. 前端学习(2256)如何解决冲突
  8. Seata多微服务互相调用_全局分布式事物使用案例_Order-Module order微服务的配置搭建---微服务升级_SpringCloud Alibaba工作笔记0060
  9. Win10下python不同版本同时安装并解决pip共存问题
  10. 10分钟学习简略五子棋 源码+注释教学
  11. 【PostgreSQL-9.6.3】一般视图
  12. CGCS2000大地坐标系、北斗坐标系(BDCS)与WGS84坐标系的差异
  13. 爬虫(七):爬取猫眼电影top100
  14. JavaScript BOM 随笔谈
  15. JAVA代码实现计算器功能
  16. 除了技校 哪里还可以学计算机技术,我打算去读技校,技校毕业了去工作有钱了,还可以读技校吗?(我想多学一门技术)...
  17. Add-Migration
  18. 但得有心能自奋,何愁他日不雄飞
  19. 大学生怎么入门Android,从一个大学生的角度打开K30PRO,以及对手机圈子的一些看法...
  20. 年度目标进度和完成进度对比

热门文章

  1. LeetCode 501. 二叉搜索树中的众数(中序遍历)
  2. 在微型计算机中8m,第一部分 计算机基础知识部分习题(答案)
  3. postforobject 设置代理_Spring RestTemplate和代理身份验证
  4. matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法
  5. 初始化环境配置:CentOS 7.4x64 系统安装及基础配置
  6. 用Vue.js开发微信小程序:开源框架mpvue解析
  7. 工作中如何做好技术积累
  8. 要成为一个 Java 架构师得学习哪些知识以及方法?
  9. 常用的后端性能优化六种方式:缓存化+服务化+异步化等
  10. 论文浅尝 | LGESQL: 结合线性有向图以及普通有向图的自然语言转换SQL语句模型...