思路:这题从动态规划的思想上来看很像0-1背包问题,后者需要小于等于背包容量的条件下价值最大化,这里则是刚好等于数组之和的一半;
1°,要想满足条件,数组之和sum必须为偶数,并且目标值target=sum/2,所要做的就是在数组中找到若干个元素,使之和为target
2°,建立动态规划模型,bool dp[len][taeget+1]中,dp[i][j]的值表示数组[0,i]中是否存在若干个元素的和为j
3°,边界条件{对于所有dp[i][0]=true,因为数组[0,i]我都可以不选从而达到j=0的条件} {dp[0][nums[0]]=true,选择数组第一个元素(nums[0])能让j=nums[0]满足}
4°,对于dp[i][j]的取值有以下两种情况:

  • 如果j<nums[i],那么nums[i]必不能选,选了就超过j了 => dp[i][j]=dp[i-1][j]
  • 如果j>=nums[i],那么nums[i]可选可不选 => df[i][j]=dp[i-1][j](不选)||dp[i-1][j-nums[i]](选)
    5°,最后return dp[len-1][target]即可

详细版可看题解=>力扣官方题解

class Solution {public:bool canPartition(vector<int> &nums){int len = nums.size();if (len < 2)return false;if (len == 2 && nums[0] != nums[1])return false;int sum = 0, target = 0;for (int i = 0; i < len; i++){sum += nums[i];}if (sum & 1) //如果sum是奇数,直接return false{return false;}else //如果是偶数,说明可能为true 可能为false,如果能凑出若干整数使它们和为sum/2,说明为true{target = sum / 2;}//dp[i][j]标识从数组[0,i]下标范围内选区若干整数(可以是0个),是否存在一种方案使得被选取得正整数和等于jbool **dp = new bool *[len];for (int i = 0; i < len; i++){dp[i] = new bool[target + 1];for (int j = 0; j < target + 1; j++){dp[i][j] = false;}}//边界条件1:对于所有j=0,dp[i][0]=true,因为我可以选0个达到j=0;for (int i = 0; i < len; i++){dp[i][0] = true;}//边界条件2:当i=0时,只有1个整数(nums[0])能被选到,所以dp[0][nums[0]]=truedp[0][nums[0]] = true;for (int i = 1; i < len; i++){for (int j = 1; j < target + 1; j++){//如果j>=nums[i],则nums[i]可选可不选if (j >= nums[i]){//            选nums[i]              不选nums[i]dp[i][j] = dp[i - 1][j - nums[i]] || dp[i - 1][j];}//如果j<nums[i],则说明nums[i]必不能选else{dp[i][j] = dp[i - 1][j];}}}return dp[len - 1][target];}
};

Leetcode每日一题:416.partition-equal-subset-sum(分割等和子集)相关推荐

  1. leetcode 416. Partition Equal Subset Sum | 416. 分割等和子集(Java)

    题目 https://leetcode.com/problems/partition-equal-subset-sum/ 题解 乍一看是背包问题,但不同的是,本题要求结果等于某值,背包要求结果小于某值 ...

  2. 【leetcode】416. Partition Equal Subset Sum

    题目如下: 解题思路:对于这种判断是否的题目,首先看看动态规划能不能解决.本题可以看成是从nums中任选i个元素,判断其和是否为sum(nums)/2,很显然从nums中任选i个元素的和的取值范围是[ ...

  3. LeetCode Partition Equal Subset Sum(动态规划)

    问题:给出一个数组,问是否可以分成两个子集,其和相等 思路:首先要求数组和是偶数,然后用动态规划来求. 用dp(i,j)表示第i步时和为j是否可行,则有dp(i,j)= dp(i-1,j) || dp ...

  4. LeetCode每日一题 416. 分割等和子集

    题目链接 思路 转化成背包问题 class Solution {public:bool canPartition(vector<int>& nums) {if (nums.size ...

  5. leetcode416. Partition Equal Subset Sum

    题目要求 Given a non-empty array containing only positive integers, find if the array can be partitioned ...

  6. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  7. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  8. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  9. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  10. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

最新文章

  1. vrrp preempt mode configed in keepalived conf
  2. python爬虫工程师-记录一下自己找“python爬虫工程师实习生”岗位的经历
  3. 数据可视化的开源方案: Superset vs Redash vs Metabase (一)
  4. (转载)grep的使用
  5. [html] 字体图标加载出来成了小方块,是什么原因呢?如何解决?
  6. 软考信息安全工程师学习笔记汇总
  7. 关于EXCEL相关类的一些函数解释
  8. iPhone 13供需接近平衡,iPhone 13 Pro交付时间较长
  9. HAProxy负载均衡代理
  10. Web前端实现锁屏/解锁功能
  11. 如何制定个人理财计划_如何根据经济状况做个人投资理财计划?
  12. Spring boot设置文件上传大小限制
  13. vue源码解析-实现
  14. 软件测试工具Autorunner的基本使用方法
  15. php自动生成word目录,word目录自动生成,word如何自动生成目录
  16. 数的变幻(小明买书)
  17. 洛谷——P1724 东风谷早苗
  18. 进程管理API之find_get_pid
  19. wps“公式编辑器”的MT Extra 字体无效,将无法显示和打印某些字体。请重新安装“公式编辑器”,以便正确安装其字体
  20. HMM(隐马尔可夫)

热门文章

  1. C++并发编程之std::future
  2. Myslq 之创建数据表
  3. SpringBoot+MyBatis+Mysql 6.X 版本日期型数据获,时间错乱,jason序列化时间相差8小时问题...
  4. 第四章:Django模型——添加 Event发布会的表 报错
  5. 160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
  6. 测试思想-验收测试 关于验收测试
  7. Perl 标量的操作符
  8. iis5.1配置php运行环境
  9. Windows下Android开发环境搭建和配置
  10. 二十、SAP中定义内表