当前位置: 首页 > news >正文

LeetCode:89.分割等和子集

目录

1.分割等和子集


1.分割等和子集

        对于这道题,我们可以先计算数组的总和,如果总和为奇数的话,就不需要后面的判断了,奇数和肯定无法分割等和子集

        和sum为偶数后,我们可以将其看作一个背包问题,我们需要从数组中找到和为sum/2的数组,所以我们就将其转化为背包问题

        设dp[i][j]表示能否从前i个数字中找到和为j的数组,分为以下情况:

  1. 选择i这个数,dp[i][j] = dp[i - 1][j - nums[i]]
  2. 不选择i这个数,dp[i][j] = dp[i - 1][j]

我们取这两种结果的或运算,只要满足一种即可

class Solution {
public:bool canPartition(vector<int>& nums) {int n = nums.size(), sum = 0;for(auto x : nums) sum += x;if(sum % 2 == 1) return false;int aim = sum / 2;vector<vector<bool>> dp(n + 1, vector<bool>(aim + 1));for(int i = 0; i <= n; i++) dp[i][0] = true;for(int i = 1; i <= n; i++)for(int j = 0; j <= aim; j++){dp[i][j] = dp[i - 1][j];if(j >= nums[i - 1])dp[i][j] = dp[i][j] || dp[i - 1][j - nums[i - 1]];}return dp[n][aim];}
};

空间优化后

class Solution {
public:bool canPartition(vector<int>& nums) {int n = nums.size(), sum = 0;for(auto x : nums) sum += x;if(sum % 2 == 1) return false;int aim = sum / 2;vector<bool> dp(aim + 1);dp[0] = true;for(int i = 1; i <= n; i++)for(int j = aim; j >= nums[i - 1]; j--)dp[j] = dp[j] || dp[j - nums[i - 1]];return dp[aim];}
};

http://www.dtcms.com/a/438282.html

相关文章:

  • 基于 GEE 处理、可视化和导出 Landsat 5 和 Landsat 8 卫星遥感影像数据
  • Python基础入门例程88-NP88 句子拆分
  • 网站上添加图片的原则59网一起做网站
  • k8s学习(一)——kubernetes重要基础概念概述
  • Unity excel 表格文件导入
  • 【系统架构设计-零】系统架构设计总述与学习线路
  • 做网站郑州公司北京工商局网站如何做股东变更
  • 【C++】C++ 中多态是什么?咋用的?
  • Dijkstra最短路径算法
  • 扶沟县网站开发怎么知道一个网站是哪家公司做的
  • mysql基于GTID恢复数据
  • LabVIEW正弦波去噪与信号处理
  • winform 五子棋
  • Java实现BCH与BTC的地址相互转换
  • CyberSecurity:SSL Client-Initiated Renegotiation 客户端发起的重新协商ddos攻击
  • 关于Mybatis-Plus的insertOrUpdate()方法使用时的问题与解决—数值精度转化问题
  • 石家庄做网站制作公司网站写作赚钱
  • Docker、容器、虚拟机到底是什么
  • 西安微信商城网站开发做阿里巴巴怎么进公司网站
  • Go语言入门(17)-接口
  • WebPages 安全
  • 安卓基础组件030-进程和线程
  • [ vue 前端框架 ] 基本用法和vue.cli脚手架搭建
  • 鸿蒙Next中使用Socket进行网络通信:完整指南与实战
  • dw如何做商业网站淘宝网站建设流程
  • 网站做好了 怎么做解析wordpress 怎么迁移
  • GNS3 3.0.5新版教程,以及Cloud设备找不到VMware网卡的解决方法
  • 比奇堡合唱团制作教学,AI翻唱教学动漫角色歌曲
  • 活动展板设计:大尺寸 + 高分辨率,打印清晰
  • 深圳市城乡建设部网站首页一个网站如何做盈利