leetcode(力扣) 416. 分割等和子集 (动态规划 01背包问题)
文章目录
- 题目描述
- 思路分析
- 完整代码
题目描述
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
示例 1:
输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。
示例 2:
输入:nums = [1,2,3,5]
输出:false
解释:数组不能分割成两个元素和相等的子集。
思路分析
在做这道题之前一定要先看 01背包理论基础
这种题最难的不是写代码,也不是思路,而是怎么建模,要不是最近在练动态规划,我都不一定能想到用01背包去做这个题。
题目和01背包的转换:
题目给出一个数组nums,要求分成两个子集,使他们相等,这里要注意,只能分成两个子集。 所以问题转化成,求一个子集 使其等于 sum(nums) // 2 == target。如果有这样的子集 则返回True 否则返回False
背包容量就是 target, dp[j] 则代表 背包容量为j时能凑的最大的子集和为dp[j],最后如果 dp[target] == target 则就是找到了某个子集使其等于目标值。
这道题里的物品重量=物品价值=数组值=nums[i]。
动规五步走;
1.确定dp下标含义:
dp[j] 表示背包容量为 j时,最大的子集和为dp[j],
2.确定递推公式:
在问题转换哪里已经分析过了,直接拿传统背包问题来转换一下 就行。
递推公式:dp[j] = max(dp[j],dp[j-nums[i]]+nums[i])
3.初始化dp
这里的dp[j] 表示背包容量为j的最大子集和为dp[j]。
所以也就意味这容量能多大,我们初始化就得初始化多大的一维数组。
这里要看题目给的提示。
提示:
1 <= nums.length <= 200
1 <= nums[i] <= 100
所以最大应该是20000,而我们背包只需要一半的容量,直接初始化10000个[0]的一维数组就行了。
4.遍历顺序:
这个和传统的背包问题没什么区别,先遍历物品,在倒叙遍历背包。
外面循环范围是从0到len(nums)。
里面循环范围是从 target到nums[i](含),这里我一开始就写错了,注意这里的里层循环遍历的是背包容量,如果你的背包容量已经无法装下当前的 i 物品了,那就不用往后进行了,所以是到nums[i]截至。
5.模拟dp数组数值:
通常偷懒这一步,如果出错了可以回来看看dp的情况,方便debug。
完整代码
class Solution:
def canPartition(self, nums: List[int]) -> bool:
if sum(nums) % 2 == 1:
return False
target = sum(nums) // 2
dp = [0] * 10000
# dp[i] 表示背包容量i 里的最大子集是dp[i]
# 先物品,再背包,这里就想那个二维的数组格子就行了。
for i in range(len(nums)):
for j in range(target,nums[i]-1,-1): # j表示背包容量,你的j必须大于目前遍历i的重量,才有往后的意义。
dp[j] = max(dp[j],dp[j-nums[i]]+nums[i])
return dp[target] == target
相关文章
- dededms后台与前台分两个服务器安全
dede建的站,前台,后台所有.html,.htm都被挂了链接?如何解决第一步:把整个网站第二步:整个网站采用批量替换工具,将挂马链接全部替换第三步:分析你的服务器apache日志,看是不是有人生成了一些非法文件,如果是就将这些非法文件删除第四步:将服务器上面的程序全部删除后,再…...
2023/3/26 20:28:36 - discuz默认密码
DZ论坛后台怎么查看用户现在的密码呢?展开1全部查看不了。discuz密码是单向加密,不能解密的。不止后台查看不了,连会员自己都无法查看,只能通过重置密码的方式,发送重置链接到注册邮箱,重置密码。后台管理员有权限重置会员密码,但是没有办法查看到。听说可以直接查看数据…...
2023/3/26 20:24:10 - 云存储多少钱一个月
云终端是如何防止存储的数据外泄?它的数据是存储在哪里?展开1全部电脑PC的数据存储模式是单独存储在自己的电脑上,这样造成了数据存储的分散,非常容易造成公司的信息外泄,而云终端却不会这样。云终端的所有的数据都集中存储在服务器上,只有管理员才能进行删除与修改,而且…...
2023/3/26 20:24:03 - MapReduce 编程模型到底是怎样的?
前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 正文 MapReduce 编程…...
2023/3/26 20:21:37 - 嵌入式和单片机开发模式的区别
一、 开发模式 单片机开发多为裸机,程序规模小,多为单个程序员独立开发。有些复杂产品也会使用高端单片机如STM32之类,并使用RTOS(uCOS、freeRTOS等)。嵌入式开发几乎全部基于嵌入式操作系统,目前使用最多的是 linux 和Android。…...
2023/3/26 20:20:44 - 如何将snake模型与Hopfield神经网络结合用于提取边缘
Computerized Tumor Boundary Detection Using a Hopfield Neural Network这篇论文给出了结合的思想此方法在论文中被用于提取人脑多层MRI图像上每个切片中的脑肿瘤的边界。首先使用低通线性滤波器对每个原始MRI数据切片进行预处理以增强图像。然后根据形态学过程得到的轮廓为初…...
2023/3/26 20:20:34 - Android应用之PreferenceFragment
最近在看Android源码Setting代码的时候,发现其中配置都是用的PreferenceFragment,以前对这一块不是很了解, 查资料看了一下,感觉用起来好方便。 PreferenceFragment的界面也是写在一个XML文件中,不过不是放在layout目…...
2023/3/26 20:18:18 - 2022-01-17 在pod内部操作k8s
目录 摘要: 使用模块: 例子: 说明: pod的接口: 摘要: 因为某些业务需要在pod内部直接操作k8s, 本文记录如何处理. 使用模块: client-go标准接口: https://github.com/kubernetes/client-go 例子: 在pod内访问k8s: https://github.com/kubernetes/client-go/tree/maste…...
2023/3/26 20:17:02 - 算法导论习题(1):摔杯子
选自Algorithm Design第二章第8题 1 题目描述 你正在对各种型号的玻璃罐进行一些压力测试,以确定它们可以跌落且不会破裂的高度。 在特定类型的玻璃罐上,此实验的设置如下:你有一个有 n 个梯级的梯子,你想找到最高的梯级…...
2023/3/26 20:16:15 - android sqlite #039;,问题详情_百度云推送_免费专业最精准的移动推送服务平台
未解决报错 SIGSEGV(SEGV_MAPERR)#31863个回答push_client_sdk_for_android6.0.0Nicholas_lol1 2017-12-21问:跟踪日志#00 pc 001e5672 /system/lib/libart.so (std::__1::__tree_iterator<:__1::__value_type art::safemap int std::__1::set std::__1::less>…...
2023/3/26 20:15:33 - vue 给取data值_在Vue中获取自定义属性方法:data-id的实例
获取自定义属性的方法:第一步:首先在标签上绑定上click"getDateId(item.id)",并将属性值传到绑定的事件里面第二步:在标签上继续绑定:date-id "item.id"属性第三步:在methods: {getDataId(id) {c…...
2023/3/26 20:15:10 - pca的python源代码_PCA python代码实现
PCA python代码实现#coding:utf-8from numpy import *import matplotlibimport matplotlib.pyplot as pltdef loadDataSet(fileName, delimt):fr open(fileName)stringArr [line.strip().split(delim) for line in fr.readlines()]datArr [map(float,line) for line in stri…...
2023/3/26 20:15:09 - 安卓自定义view(全面)
安卓自定义view 一、view的测量 1.测量的模式: EXACTLY :精确值模式,当把空间的layout_width属性或者layout_height的属性设置为具体的数值时,或者指定为match_parent时候,系统就是使用的EXACTLY 模式;AT_MOST: 最大…...
2023/3/26 20:15:06 - 使用HttpClient4.x实现模拟验证码登陆
先来简述一下没有验证码的网站登陆流程: 1、用户打开登陆页。这个动作完成的最关键的部分是,后台为这个浏览器新建了一个cookie,之后用户在这个浏览器的所有动作都将与这个Cookie密切相关。 2、用户输入用户名和密码(也许还有别的表单需要填…...
2023/3/26 20:14:35 - 手机上免费的C语言,C语言秘笈手机软件免费阅读可下载
C语言秘笈是款C语言学习的软件,C语言是学编程的基本,手机软件里边有比较丰富的实例教程和資源,特别适合程序编写的新手开展学习培训,客户在这儿可以学习培训到最基本的C语言,让客户可以迅速的把握C语言的基本。C语言秘…...
2023/3/26 20:14:03 - 苏宁!你还挺得过去吗?(苏宁大幅裁员)
前两天才写了一篇《作为一个江苏人,我眼中的苏宁》, 说实话,我内心是有点不太相信,偌大的苏宁会走到今天这步田地。 可一件件传闻都慢慢变成了实锤! 一、苏宁大裁员 一位多年老友刚跳槽去了苏宁; 入职一…...
2023/3/26 20:13:44 - Android设置页面PreferenceFragment使用详细+代码分析
Android设置页面PreferenceFragment使用详细 文章目录Android设置页面PreferenceFragment使用详细一 设置页面核心代码二 设置页面布局核心代码三SettingFragment核心代码四 setting.xml核心代码五 本文例子一份六 尾言 本文Demo 一 设置页面核心代码 /* * 创建者: KX * …...
2023/3/26 20:12:03 - MFC定时器的使用
MFC 一.简介 这篇说一下在MFC开发过程当中定时器的使用,我们以在界面上显示系统的时间,让定时器工作,每隔1s时间更新一次 二.使用 1.启动定时器 在我们项目的初始化函数当中,添加初始化代码(OnInitDialog&#x…...
2023/3/26 20:10:40 - 我爸说我应该感恩
是的,我知道,这个世界很多人都帮过我。 但是,面对家里的那些亲戚,我知道我不理他们,他们也没有义务理我。 我应该记住感恩。别人的生活,我并没有深入接触,我不了解。我的生活,我的选…...
2023/3/26 20:10:21 - 【计算机网络】对时延带宽积的理解
0.传播时延和带宽 传播时延: 指电磁信号或光信号在传输介质中传播一定的距离所花费的时间,即从发送端发送数据开始,到接收端收到数据,总共经历的时间。 带宽:单位时间内网络中的某信道所能通过的“最高数据率”,单位是…...
2023/3/26 20:10:12
最新文章
- leetcode(力扣) 416. 分割等和子集 (动态规划 01背包问题)
文章目录题目描述思路分析完整代码题目描述 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可…...
2023/3/26 20:28:51 - dededms后台与前台分两个服务器安全
dede建的站,前台,后台所有.html,.htm都被挂了链接?如何解决第一步:把整个网站第二步:整个网站采用批量替换工具,将挂马链接全部替换第三步:分析你的服务器apache日志,看是不是有人生成了一些非法文件,如果是就将这些非法文件删除第四步:将服务器上面的程序全部删除后,再…...
2023/3/26 20:28:36 - Bootstrap系列之Flex布局
文章目录Bootstrap中的Flexd-flex与d-inline-flex也存在响应式变化flex水平布局flex垂直布局flex水平与垂直也存在响应式变化内容排列(justify-content响应式变化也存在于这里sm,md,lg,xl)子元素对齐方式Align items&a…...
2023/3/26 20:28:34 - ChIP-seq 分析:评估片段长度与处理(6)
1. 片段长度评估 片段长度的预测是 ChIPseq 的重要组成部分,它会影响峰识别、峰识别和覆盖概况。 使用互相关或交叉覆盖可以评估按链进行的读取聚类,从而衡量质量。 fragment在 ChIPseq 中,通常是 dsDNA 的短单端读取。片段的 5 将在“”链上…...
2023/3/26 20:28:28 - python之requests库
python之requests库requests库请求方法示例get方法get方法访问百度的输出指定方法发送请求简单的requests请求例子response 响应对象的text和content之间的区别发送 带header的请求发送带参数的请求在headers参数中携带Cookie两种使用cookie的形式:1.2.超时参数&…...
2023/3/26 20:28:24 - [C语言数据结构]栈和队列
目录 1.栈的定义: 1.2栈的特性: 1.3栈的实现: 1.4代码: 1.4.1结构的声明: 1.4.2栈的初始化: 代码: 1.4.3入栈: 代码: 1.4.4出栈 void StackPop(ST* ps); 代码…...
2023/3/26 20:28:14 - 设计模式-状态机模式
参考 什么是状态机? 设计模式-状态机模式 什么是状态机(有限状态自动机) 可以把状态机比作方程式, 你输入当前信息, 就能得到下一个信息 举个例子, 按钮门有两个状态, 关闭状态和打开状态, 如果按下开门按钮, 门的状态就从关闭到打开 状态机就是接受门当前状态…...
2023/3/26 20:27:56 - 了解操作符的那些事(二)
小叮当的任意门sizeof 和 数组关系操作符逻辑操作符条件操作符逗号表达式下标引用,函数调用和结果成员下标引用函数调用访问一个结构的成员表达式求值隐式类型转换算术转换操作符的属性前言:~ 对一个数的二进制按位取反 *间接访问操作符(解引用操作符&am…...
2023/3/26 20:27:33 - 本地demo服务器搭建计划——(一)linux双系统安装内网穿透
由于工作之后一直用的笔记本,家里的台式机闲置了,正好拿来搭建个本地服务器。 上拼多多买了两根160元16G的国产杂牌内存条,可惜不支持xmp,凑合用够了。 安装linux系统步骤: 第一步:分区。进磁盘管理&…...
2023/3/26 20:27:09 - 面试题67. 把字符串转换成整数
题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时…...
2023/3/26 20:26:59 - Linux中查找最大文件的命令是什么?
在Linux系统中,大部分操作都可以通过命令来完成,因此熟练掌握各种各样的命令成为Linux运维工程师的必备技能之一,那么Linux中查找最大文件的方法有哪些?本文为大家介绍一下。 1、 ls命令 最简单的方法就是借助ls命令,因为ls命令本…...
2023/3/26 20:26:59 - Linux驱动开发 - 字符驱动
字符驱动 #include <linux/types.h> #include <linux/kernel.h> #include <linux/delay.h> #include <linux/ide.h> #include <linux/init.h> #include <linux/module.h> #define CHRDEVBASE_MAJOR 200 /* 主设备号 */ #define CHRDEV…...
2023/3/26 20:26:48 - MySQL中SQL命令语句条件查询
一、聚合函数 聚合函数:又叫组函数,用来对表中的数据进行统计和计算,结合group by分组使用,用于统计和计算分组数据 常用聚合函数 count(col):求指定列的总行数max(col):求指定列的最大值min(col)&#…...
2023/3/26 20:26:21 - Whistle 前端抓包
whistle文档:http://wproxy.org/whistle/install.html 1.确保电脑安装了node node -v如果能正常输出Node的版本号,表示Node已安装成功 2.安装whistle npm install -g whistlewhistle安装完成后,执行命令 whistle help 或 w2 help…...
2023/3/26 20:26:12 - 单分散PEG之Amino-PEG24-acid;CAS:196936-04-6氨基-二十四聚乙二醇-羧酸
Amino-PEG24-acid氨基-二十四聚乙二醇-羧酸196936-04-6 中文名称:氨基-二十四聚乙二醇-羧酸 英文名称:Amino-PEG24-acid 分子式:C51H103NO26 分子量:1146.35 CAS:196936-04-6 外观:粘稠液体或者固体粉末&a…...
2023/3/26 20:26:09 - Java EE|软件视角下的操作系统
文章目录前言操作系统的概念及常见的OS举例操作系统的定位以及它的功能/职责/作用全程高能!!!敲黑板警告!!!一、进程概念(感性认知)二、进程的描述和组织!!&a…...
2023/3/26 20:25:44 - 大数据技术之Hudi
Hudi概述 1.1 Hudi简介 Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发&a…...
2023/3/26 20:25:38 - 06- OpenCV查找图像轮廓 (OpenCV基础) (机器视觉)
知识重点 灰度图转换: gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)二值化: 返回两个东西,一个阈值, 一个是二值化的图: thresh, binary cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)查找轮廓: 返回两个结果,分别是轮廓和层级: c…...
2023/3/26 20:25:37 - while循环和for循环
一、while循环 1、while 循环,只要条件为真,我们就可以执行一组语句。 2、while 循环需要预先设置索引变量。如下:我们需要定义一个变量 i,初始值设置为 1。 i 1 while i < 7:print(i)i 13、break 语句 如果使用 break 语…...
2023/3/26 20:25:28 - Redis简单入门
Redis简介 Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的NoSQL数据库。特点如下: 读写速度快:Redis官网测试读写能到10万左右每秒。速度快的原因这里简单说一下,第一是因为数据存储在内存中,我们知…...
2023/3/26 20:25:25