分割等和子集

news2024/10/2 1:32:41

题目链接

分割等和子集

题目描述

注意点

  • 数组 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)范围内能否选出某个数字组合之和为j
        boolean[][] 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.coloradmin.cn/o/1072309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMvare虚拟机安装国产麒麟V10桌面操作系统

一、系统下载 进入银河麒麟官网&#xff1a;https://www.kylinos.cn/ 选择桌面操作系统&#xff0c;然后进入操作系统版本选择页面&#xff0c;选择银河麒麟桌面操作系统V10 选择后&#xff0c;进入系统介绍页面&#xff0c;然后点击申请试用 点击后进入申请页面&#xf…

Apache Solr9.3 快速上手

Apache Solr 简介 Solr是Apache的顶级开源项目&#xff0c;使用java开发 &#xff0c;基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句&#xff0c;而且它可扩展、可配置&#xff0c;同时它对Lucene的性能进行了优化。 安装 下载 : 下载地址解压 : tar -zxv…

uniapp apple 苹果登录 离线本地打包

官方文档 uni-app官网 文档写的不全&#xff0c;没有写离线打包流程 加lib 签名里带 sign in with apple hbuilder开关 代码 测试代码&#xff0c;获取app里所有的provider uni.getProvider({service: oauth,success: function (res) {console.log(res.provider)uni.showT…

ctfshow-web4(文件包含日志注入)

像web3那样使用php伪协议&#xff0c;回显error 看了看提示&#xff1a;日志注入 文件包含 使用Wappalyzer查看一下&#xff0c;使用的中间件是Ngnix 日志包含漏洞的成因还是服务器没有进行严格的过滤 &#xff0c;导致用户可以进行任意文件读取&#xff0c; 但是前提是服务器…

月报总结|Moonbeam 9月份大事一览

相信社区的小伙伴都过了一个圆满的中秋节&#xff0c;月圆人团圆&#xff0c;以月光代表生态的Moonbeam网络也如月亮一般&#xff0c;从始至终都在波卡。 9月&#xff0c;USDC上线波卡增加流动性、Moonbeam治理界面简化促进社区参与、Grant发放引爆Moonbeam Ignite再次回归、M…

QT基础入门——Qt事件(五)

前言&#xff1a; 事件&#xff08;event&#xff09;是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件在对用户操作做出响应时发出&#xff0c;如键盘事件等&#x…

(一)Apache log4net™ 手册 - 介绍

0、相关概念 Log4j 几乎每个大型应用程序都包含自己的日志记录或跟踪 API。根据这一规则&#xff0c;E.U. SEMPER &#x1f339;项目决定编写自己的跟踪 API。那是在 1996 年初。经过无数次的增强、几个化身和大量的工作&#xff0c;API 已经发展成为 log4j —— 一个流行的 Ja…

开源音乐播放器!

导读音乐是生活的一部分。维基百科关于音乐发展历史的文章有这样一段不错的描述说&#xff1a;“全世界所有的人们&#xff0c;包括哪怕是最孤立、与世隔绝的部落&#xff0c;都会有自己的特色音乐……”好吧&#xff0c;我们开源人就构成了一个部落。我建议我们的“音乐形式”…

halcon 算子shape_trans

shape_trans 函数原型&#xff1a;shape_trans(Region : RegionTrans : Type : ) 函数作用&#xff1a;变换区域的形状 参数列表&#xff1a; Region&#xff08;in&#xff09;&#xff1a;被变换的区域 RegionTrans&#xff08;out&#xff09;&#xff1a;变换后的区域…

【SmartApi】内网局域网API调试开发工具下载使用说明-v1.0.1

最近的一些年经常在内网环境下进行开发工作&#xff0c;尤其是比较敏感的单位或者组织是有严格规定不能使用哪些软件或者是不能访问外网的。 但开发工作需要的各种软件工具又因为一些营销策略而要联网激活&#xff0c;这就和组织单位的要求相悖了。于是就萌发了开发内网局域网软…

Ajax跨域访问,访问成功但一直走error不走success的的问题解决

Ajax跨域访问,访问成功但一直走error不走success的的问题解决 通过搜索各种资料&#xff0c;终于解决啦&#xff0c;废话不多说了&#xff0c;还是老规矩直接上代码&#xff1a; 我这里用了jsonp&#xff0c;有想了解的点击 : jsonp 前端代码&#xff1a; $.ajax({type:post…

无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同

“/”应用程序中的服务器错误。 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动&#xff0c;并且客户端端口与服务器端口相同。如果服务器位于远程计算机上&#xff0c;请检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Se…

第二证券:汽车产业链股活跃,恒勃股份、博俊科技“20cm”涨停

轿车产业链股9日盘中走势活跃&#xff0c;截至发稿&#xff0c;恒勃股份、博俊科技“20cm”涨停&#xff0c;德迈仕涨超17%&#xff0c;上声电子涨超14%&#xff0c;川环科技涨超10%&#xff0c;圣龙股份、科华控股、沪光股份、上海沿浦、日盈电子、赛力斯等均涨停。 工作方面…

Linux 部署 MinIO 分布式对象存储 配置为 typora 图床

前言 MinIO 是一款高性能的对象存储系统&#xff0c;它可以用于大规模的 AI/ML、数据湖和数据库工作负载。它的 API 与Amazon S3 云存储服务完全兼容&#xff0c;可以在任何云或本地基础设施上运行。MinIO 是开源软件&#xff0c;也提供商业许可和支持 MinIO 的特点有&#x…

30分钟快速搭建并部署一个免费的个人博客

1前言 现如今网上有许多完善的博客平台&#xff0c;如博客园、掘金、思否、知乎等。有人会说为什么现在网上有这么多成熟的博客平台&#xff0c;你还要浪费时间搭建一个自己的博客系统呢&#xff1f;首先我相信每一个程序员都会想要拥有一个属于自己的博客系统&#xff0c;其次…

算法备案一定要抓紧了!独立开发者群体观察笔记;关于大模型的36句内幕和真话;电子书-人工智能原理揭秘 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f525; 提个醒&#xff01;算法备案的事情&#xff0c;要抓紧提上日程&#xff0c;以后审批会越来越紧 节前国内AI网站倒了一批又一批&#x…

一文读懂Base64

这几天在和第三方交互的时候&#xff0c;对方返回的数据是base64格式的数据&#xff0c;所以这两天又彻底捋了下Base64的来龙去脉。之前看过一篇文章说的非常好&#xff08;再找到给加上链接&#xff09;&#xff0c;我在这不详细说明了&#xff0c;只说转换过程。 还是使用中…

ClickHouse进阶(二十二):clickhouse管理与运维-服务监控

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情! 👍点赞:赞同优秀创作,你的点赞是对我创…

平凡工作也能创造奇迹:学习公文的写作逻辑和技巧

引言 如何把平凡的工作写出光环 &#x1f4dc; 很多初入职场的人在撰写个人先进事迹材料时面临的最大问题是&#xff1a;他们认为自己做的工作都是琐碎且普通的&#xff0c;没有任何惊天动地的成就或值得称赞的成绩。因此&#xff0c;他们感到非常困惑&#xff0c;不知道该如何…

动态代理初步了解

准备案例 需求 模拟某企业用户管理业务&#xff0c;需包含用户登录&#xff0c;用户删除&#xff0c;用户查询功能&#xff0c;并要统计每个功能的耗时。 分析与实现 定义一个UserService表示用户业务接口&#xff0c;规定必须完成用户登录&#xff0c;用户删除&#xff0c…