分割等和子集

题目链接

分割等和子集

题目描述

注意点

  • 数组 nums 非空
  • 数组 nums 只包含正整数

解答思路

  • 最初想到的是根据回溯+剪枝解决本题,如果数组大小小于2,则肯定不能找到分割等和子集,除此以外,如果数组之和sum不能被2整除,也肯定不能找到分割等和子集,然后将数组排序后深度优先遍历查找符合的组合,最终运行时超时了,要考虑更加巧妙的方法
  • 参照题解使用动态规划完成本题,其可以转换成背包问题,思路为:创建一个dp[n][target + 1]的数组,其中n为数组的长度,target为数组之和除以2,dp[i][j]表示(0, i)范围内能否选出某个数字组合之和为j,从dp[0][0]开始,找到从0~i个元素取数字组合时所有可能组成的数字之和的值,并将相应dp[i][j]更新为1,直到找到dp[i][target]为true或遍历完整个数组为止

代码

class Solution {public boolean canPartition(int[] nums) {int n = nums.length;if (n < 2) {return false;}int sum = 0;for (int num : nums) {sum += num;}if (sum % 2 != 0) {return false;}int target = sum / 2;// dp[i][j]表示(0, i)范围内能否选出某个数字组合之和为jboolean[][] dp = new boolean[n][target + 1];// 和为0必定成立for (int i = 0; i < n; i++) {dp[i][0] = true;}for (int i = 0; i < n; i++) {// 该元素为一组成立if (nums[i] == target) {return true;}// 第一个元素不必考虑前面(0, i - 1)的数字组合if (i == 0) {if (nums[i] < target) {dp[i][nums[i]] = true;}continue;}// 根据前面(0, i - 1)的数字组合推出(0, i)的数字组合之和for (int j = 1; j <= target; j++) {if (dp[i - 1][j] && j + nums[i] == target) {return true;}dp[i][j] = dp[i - 1][j];if (nums[i] < j) {dp[i][j] = dp[i][j] || dp[i - 1][j - nums[i]];}}}return false;}
}

关键点

  • 将本题转换为背包问题
  • 动态规划的思想
  • 本题如何通过前面的情况动态规划推出后面的情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/127632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity脚本_MonoBehaviour c#

在MonoBehaviour里可以获取&#xff1a; 自己物体身上的属性 和 位置 及 其他类物体身上的属性 和 位置 this.gameObject.属性 this.transform.position this.transform.eulerAngles this.transform.lossyScale 如果是其他类 需要创建一个类对象 然后用类对象去 点 另外…

钡铼BL124PN:简单快速转换Profinet到Ethernet/IP

钡铼技术BL124PN是一款高性能的Profinet转Ethernet/IP网关设备。该网关专为工业自动化领域设计&#xff0c;用于实现不同协议之间的互连和通信。BL124PN采用可靠稳定的硬件和先进的通信技术&#xff0c;具有以下主要特点&#xff1a; 协议转换能力&#xff1a;BL124PN能够将Pr…

攻防世界-fakebook

打开题目链接 尝试弱口令登录 失败 随便注册 点击admin后跳转到下面这个页面 显示的是注册用户信息&#xff0c;观察url发现no1&#xff0c;猜测存在注入 用单引号测试一下&#xff0c;报错&#xff0c;确实存在SQL注入 使用order by 判断字段数 ?no1 order by 5 5的时候…

【全新开源项目】专为智能无人系统打造的边缘实时感知 SDK 库 SpireCV 正式上架

移动机器人的视觉感知系统&#xff0c;以往常用的是诸如OpenCV和一些深度学习的视觉库。然而这类大而全的视觉库&#xff0c;很少针对移动机器人进行优化(尤其是针对无人机)&#xff0c;也不会针对硬件进行相关的优化。 机器人尤其是无人机直接使用深度学习库会面临什么问题&am…

十、2023.10.4.计算机网络(one).10

文章目录 1、简述静态路由和动态路由&#xff1f;2、说说有哪些路由协议&#xff0c;都是如何更新的&#xff1f;3、简述域名解析过程&#xff0c;本机如何干预域名解析&#xff1f;4、简述 DNS 查询服务器的基本流程是什么&#xff1f;DNS 劫持是什么&#xff1f;5、简述网关的…

redis的持久化消息队列

Redis Stream Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Redis Stream 主要用于消息队列&#xff08;MQ&#xff0c;Message Queue&#xff09;&#xff0c;Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能&#xff0c;但它有个缺点就是消息无法…

如何提升爬虫IP使用效率?精打细算的方法分享

在进行爬虫数据采集时&#xff0c;爬虫IP是不可或缺的工具。然而&#xff0c;爬虫IP的费用可能是一个爬虫项目的重要开支之一。为了帮助您节省爬虫IP经费&#xff0c;本文将分享一些经济高效的方法&#xff0c;让您在使用爬虫IP时更加节约成本&#xff0c;提高经济效益。 一、优…

英特尔参与 CentOS Stream 项目

导读红帽官方发布公告欢迎英特尔参与进 CentOS Stream 项目&#xff0c;并表示 “这一举措不仅进一步深化了我们长期的合作关系&#xff0c;也构建在英特尔已经在 Fedora 项目中积极贡献的基础之上。” 目前&#xff0c;CentOS Stream 共包括以下特别兴趣小组&#xff08;SIG&a…

【单调栈】下一个更大元素 III

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;下一个排列 写在最后 Tag 【单调栈】【数组】【字符串】 题目来源 556. 下一个更大元素 III 题目解读 找出大于整数的最小整数&#xff0c;这个最小整数必须由原来整数中出现的数字组成。 解题思路 方法一&#xff…

自动化测试 selenium+Junit 总结知识

文章目录 Selenium 自动化测试什么是selenium&#xff1f;selenium的原理是什么&#xff1f;Selenium 自动化测试的流程是什么&#xff1f;Selnium还有一些其他的操作 Selenium 如何定位动态元素&#xff1f; Junit 测试框架注解断言执行顺序测试套件参数化单参数多参数动态参数…

JS-Dom转为图片,并放入pdf中进行下载

1、将dom转换为图片 这里我们使用html2canvas工具插件先将dom转为canvas元素然后canvas拥有一个方法可以将绘制出来的图形转为url然后下载即可注意&#xff1a;如果元素使用了渐变背景并透明的话&#xff0c;生成的图片可能会有点问题。我下面这个案例使用了渐变背景实现元素对…

前端自动化测试入门教程

&#x1fab4; 背景 前端的自动化测试主要可以分为以下四种&#xff1a; 单元测试&#xff08;Unit Test&#xff09;&#xff1a;对一个函数/组件进行测试&#xff0c;一般用于公共函数/公共组件的测试维护。常用框架有 Jest、Jasmine、Mocha等&#xff1b; 集成测试&#x…