代码随想录算法训练营第42天| 416. 分割等和子集

news2024/11/25 6:59:17

代码随想录算法训练营第42天| 416. 分割等和子集

  • 416. 分割等和子集

416. 分割等和子集

题目链接:416. 分割等和子集,难度:中等
【实现代码】

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = 0;
        for (int i = 0; i < nums.size(); i++) {
            sum += nums[i];
        }
        if (sum % 2 == 1) {
            return false;
        }

        int target = sum / 2;
        vector<int> dp(10001, 0);
        dp[0] = 0; 
        for (int i = 0; i < nums.size(); i++) {
            for (int j = target; j >= nums[i]; j--) {
                dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
            }
        }
        return dp[target] == target;
    }
};

【解题思路】

为什么这一题使用01背包来做?
当然本题使用回溯算法求解出每一种情况进行判断也可以,但是会超时,因为数据量大。和本题类似的一个题目698. 划分为k个相等的子集可以使用回溯来解决,因为数据量小。这也提示我,如果看到一个题目可以用回溯算法解决,那么去看数据量,如果数据量小则使用回溯来解决,数据量大则考虑使用贪心或者动态规划。
动规五部曲分析如下:

  1. 确定dp数组以及下标的含义:01背包中,dp[j] 表示: 容量为j的背包,所背的物品价值最大可以为dp[j]。本题中每一个元素的数值既是重量,也是价值。
  2. 确定递推公式:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
  3. dp数组如何初始化:从dp[j]的定义来看,首先dp[0]一定是0。本题题目中 只包含正整数的非空数组,所以非0下标的元素初始化为0就可以了。
  4. 确定遍历顺序:如果使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒序遍历!
  5. 举例推导dp数组:dp[j]的数值一定是小于等于j的。如果dp[j] == j 说明,集合中的子集总和正好可以凑成总和j,理解这一点很重要。用例1,输入[1,5,11,5] 为例,如图:
    在这里插入图片描述

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

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

相关文章

抢鲜发布:Flutter 3.7更新详解

本文首发自「慕课网」(imooc.com)&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;CrazyCodeBoy|慕课网讲师 新年伊始&#xff0c;由 Flutter 3.7 正式版来「打头阵」&#xff01;我们与整个…

AI时代,重新理解阿里云

如果说&#xff0c;在数字化时代&#xff0c;阿里云给外界的标签是基于算力、数据等要素的基建角色&#xff0c;那么&#xff0c;在如今的智能化时代&#xff0c;基于自身强大的云计算能力和长期以往的AI技术积累&#xff0c;它的这种底座底色显然再一次被夯实、彰显。 作者|皮…

【Python_Scrapy学习笔记(六)】Scrapy框架基本使用流程

Scrapy框架基本使用流程 前言 本文中介绍 Scrapy 框架的基本使用流程&#xff0c;并以抓取汽车之家二手车数据为例进行讲解。 正文 1、Scrapy框架基本使用流程 创建爬虫项目&#xff1a;scrapy startprojecct 项目名 cd到项目文件夹&#xff1a;cd 项目名 创建爬虫文件&a…

PCB模块化设计06——HDMI接口PCB布局布线设计规范

目录PCB模块化设计06——HDMI接口PCB布局布线设计规范1、HDMI接口的定义2、HDMI管脚定义&#xff08;A型为例&#xff09;3、HDMI接口PCB布局要求4、HDMI接口布线要求PCB模块化设计06——HDMI接口PCB布局布线设计规范 1、HDMI接口的定义 高清晰度多媒体接口&#xff08;英文&…

Jina AI 创始人肖涵博士:揭秘 Auto-GPT 喧嚣背后的残酷真相

Auto-GPT 究竟是一个开创性的项目&#xff0c;还是一个被过度炒作的 AI 实验&#xff1f;本文为我们揭开了喧嚣背后的真相&#xff0c;并揭示了 Auto-GPT 不适合实际应用的生产局限性。 背景介绍 这两天&#xff0c;Auto-GPT&#xff0c;一款让最强语言模型 GPT-4 能够自主完成…

winform从入门到精通

环境 开发工具 visual studio 2019 16.11 community 基础框架 framework4.8 .net5需要开发工具小版本16.8以上 winform开发入门 windows桌面端应用开发框架 https://github.com/dotnet/winforms c#基础 partial class 创建项目 项目结构 引用&#xff1a;所依赖的系统库 …

编写猫咪相册应用 HTML

文章目录1. 标题元素标签2. p元素用于在网站上创建一段文本3. 注释4. 页面主要部分标识标签5. 通过使用img元素来为你的网站添加图片6. 使用锚点元素(a)链接到另一个页面7. 使用 section 元素将照片内容与未来的内容分开8. 无序列表(ul)元素&#xff0c;列表项(li)元素在列表中…

【C++11】final与override关键字和类的新功能

目录 一、final与override关键字 1.1 final 1.2 override 二、类的新功能 2.1 默认成员函数 2.2 类成员变量初始化 2.3 default关键字 2.4 delete关键字 注意&#xff1a;C专栏的所有测试代码都是在 vs2019 的环境下编译运行的 一、final与override关键字 这两个关键…

C++基础入门

C基础入门1.C认识1.1 第一个C程序1.1.1 创建项目1.1.2 创建文件1.1.3 编写代码1.1.4 运行程序1.3 变量1.4 常量1.5 关键字1.6 标识符命名规则2 数据类型2.1 整型2.2 sizeof关键字2.3 实型&#xff08;浮点型&#xff09;2.4 字符型2.5 转义字符2.6 字符串型2.7 布尔类型 bool2.…

Session、Cookie和Token

Session、Cookie和Token 参考&#xff1a;Session、Cookie、Token 【浅谈三者之间的那点事】 HTTP协议是一种无状态协议&#xff0c;即每次服务端接收到客户端请求时&#xff0c;都是一个全新的请求&#xff0c;服务器并不知道客户端的历史请求记录&#xff1b;Session和Cooki…

统信UOS + Windows双系统安装教程

全文导读&#xff1a;本文主要介绍了AMD架构下&#xff08;Intel/amd/兆芯/海光&#xff09;的机器同时安装Windows系统UOS系统的方法。 准备环境 1、下载好UOS系统镜像&#xff08;AMD64&#xff09;&#xff0c;下载地址&#xff1a;https://www.chinauos.com/resource/down…

第6章 接口、lambda表达式与内部类

文章目录Java与C异Java与C同接口接口概念接口与抽象类静态和私有方法默认方法解决默认方法冲突接口与回调&#xff08;不明白&#xff09;Comparator接口为什么有比较器Comparator接口实现步骤示例问题对象克隆为什么克隆浅拷贝&#xff1a;Object.clone方法的问题深拷贝数组的…

Firefox浏览器-渗透测试插件推荐

在日常工作中可能需要一些浏览器插件辅助我们做工作 下面是比较好的&#xff0c;当然不一定对你有用&#xff0c;找到适合自己的即可 FoxyProxy FoxyProxy是一个高级的代理管理工具&#xff0c;它完全替代了Firefox有限的代理功能。它提供比SwitchProxy、ProxyButton、 Quick…

3-5年以上的功能测试如何进阶自动化?【附学习路线】

做为功能测试人员来讲&#xff0c;从发展方向上可分两个方面&#xff1a; 1、业务流程方向 2、专业技能方向。 当确定好方向后&#xff0c;接下来就是如何达到了。(文末自动化测试学习资料分享) 一、业务流程方向 1、熟悉底层的业务 作为功能测试工程师来讲&#xff0c;了解…

Arduino-环境搭建

Arduino-环境搭建 文章目录Arduino-环境搭建下载开发软件调研Arduino入门教程本次学习所使用的Arduino开发板型号下载开发板的包——电脑联网&#xff0c;先插上开发板&#xff0c;再打开Arduino IDEArduino串口接收实验Arduino蓝牙接收实验Arduino蓝牙发送实验下载开发软件 官…

【python-Unet】计算机视觉~舌象舌头图片分割~机器学习(三)

返回至系列文章导航博客 1 简介 舌体分割是舌诊检测的基础&#xff0c;唯有做到准确分割舌体才能保证后续训练以及预测的准确性。此部分真正的任务是在用户上传的图像中准确寻找到属于舌头的像素点。舌体分割属于生物医学图像分割领域。分割效果如下&#xff1a; 2 数据集介…

一些二叉树相关面试题

文章目录1. 对折2. 判断是否是平衡二叉树3. 判断是否是搜索二叉树4. 二叉树的直径5. 寻找最大二叉搜索树6. 用递归套路判断是否是完全二叉树7. 派对的最大快乐值1. 对折 这个大家可以自己用纸对折一下&#xff0c;我这里就简单的说一下&#xff1a; 这是我们第一次对折的情况。…

使用PHP做个图片防盗链(全网详解)

概念&#xff1a; 防盗链是一种防范网络图片、视频等资源被他人盗链&#xff08;直接在其它网站使用&#xff09;的技术。在网站上添加防盗链功能可以防止其他网站恶意盗取自己网站的图片等内容&#xff0c;减少带宽消耗和保护网站内容安全。通常实现防盗链的方式是在网站服务…

js 使用 Array.from 快速生成0~5,步进值为0.1的数组

一、我们平常用的比较多的方法是for循环生成 let data[] for(let i0;i < 51;i){data.push(i/10) }二、用Array.from生成 先来认识一下我们今天的主角&#xff01;&#xff01;&#xff01; 1、释义 Array.from() 方法从一个类似数组或可迭代对象创建一个新的&#xff0c…

SpringMVC(三):请求流程处理

一、引言&#xff1a; 如下是我画的一个简单的SpringMVC的请求流程图&#xff0c;接下来会通过请求流程图去进行源码分析。 [1 ] 当我们客户端发送请求时&#xff0c;Servlet会进行请求的解析&#xff0c;然后交给DispatcherServlet进行统一分发。[2] DispatcherServlet会根…