LCR 101. 分割等和子集——力扣——背包问题、动态规矩

问题描述

代码展示

class Solution:def canPartition(self, nums: List[int]) -> bool:if len(nums) <= 1:return Falsetotal_sum = sum(nums)if total_sum % 2 != 0:  # 总和为奇数,无法分成两个相等的子集return Falsetarget_sum = total_sum // 2dp = [[False] * (target_sum + 1) for _ in range(len(nums) + 1)]# 初始化第一列for i in range(len(nums) + 1):dp[i][0] = Truefor i in range(1, len(nums) + 1):for j in range(1, target_sum + 1):dp[i][j] = dp[i-1][j]if j >= nums[i-1]:dp[i][j] = dp[i][j] or dp[i-1][j-nums[i-1]]return dp[len(nums)][target_sum]

这段代码实现了一个判断给定数组是否可以被划分成两个和相等的子集的功能。

首先,如果数组长度小于等于1,则无法划分,直接返回False。

然后,计算数组中所有元素的总和,如果总和为奇数,则无法划分成两个相等的子集,直接返回False。

接下来,计算目标和,即总和的一半。创建一个二维的布尔型动态规划数组dp,其中dp[i][j]表示前i个元素是否可以组成和为j的子集。

然后,初始化动态规划数组的第一列,将其设为True。这是因为当目标和为0时,任何元素都可以不选,所以前i个元素都可以组成和为0的子集。

接着,遍历数组元素,对于每个元素nums[i-1],在目标和范围内(从1到target_sum),更新动态规划数组。对于每个位置(i, j),如果当前元素不选,则该位置的值与上一行相同,即dp[i][j] = dp[i-1][j];如果当前元素选择了,并且剩余和等于当前位置的值减去当前元素的值,则该位置的值为True,即dp[i][j] = dp[i-1][j-nums[i-1]]

最后,返回动态规划数组的最后一个位置的值,即dp[len(nums)][target_sum],表示前len(nums)个元素是否可以组成和为目标和的子集。

 

背包问题和动态规划问题

这段代码考察的知识点是动态规划(Dynamic Programming)和背包问题(Knapsack Problem)。

动态规划是一种解决问题的方法,它通过将问题分成更小的子问题,并保存子问题的解,从而避免重复计算,提高效率。这段代码中使用了动态规划来解决背包问题。

背包问题是一个经典的组合优化问题,通常有两种变体:0-1背包问题和完全背包问题。这段代码涉及的是0-1背包问题,即每个物品只能选择取或不取。

在这段代码中,给定一个整数数组nums,我们需要判断能否将其划分为两个和相等的子集。首先,我们计算数组的总和total_sum。如果总和为奇数,那么无法将其划分为两个相等的子集,直接返回False。

然后,我们将目标和target_sum设置为总和的一半。创建一个二维的动态规划表dp,dp[i][j]表示前i个物品中是否存在一种方式使得和为j。初始化第一列为True,因为当j为0时,任何物品都可以组成和为0的子集。

接下来,使用两层循环遍历数组nums和目标和target_sum。对于每个元素nums[i-1],我们有两种选择:取它或不取它。如果当前和j大于等于nums[i-1],那么可以选择取这个元素,使得dp[i][j]为True;否则,不取这个元素,保持dp[i][j]不变。最终,返回dp[len(nums)][target_sum]的结果,即是否存在一种方式使得前len(nums)个物品的和为target_sum。

这段代码使用动态规划的思想解决了0-1背包问题,判断了数组能否被划分为两个和相等的子集。

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

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

相关文章

myArm 全新七轴桌面型机械臂

引言 在不断演进的科技世界中&#xff0c;我们始终追求创新和卓越&#xff0c;以满足客户的需求并超越他们的期望。今天&#xff0c;我们很高兴地宣布我们的最新产品——myArm 300 Pi&#xff0c;一款七轴的桌面型机械臂。这款产品的独特之处在于其灵活性和可编程性&#xff0c…

Docker——容器生命周期管理(下篇)

Docker 一、run1、options说明2、-p的三种写法3、实例14、实例25、实例36、实例47、实例58、实例69、实例78、实例89、退出容器 二、start/stop/restart1、语法格式2、stop/restart 命令的 options 三、kill1、重点2、说明3、实例 四、rm1、说明2、实例 五、create实例 六、exe…

天眼查询企业信息API接口

"天眼"一般是指"天眼查"&#xff0c;这是一个提供全国企业信息查询的API接口。天眼查以"天眼"作为用户logo&#xff0c;基于人工智能算法的数据采集和分析技术&#xff0c;为企业和个人提供全量、精准、实时、权威的企业信息查询服务。 天眼查A…

美容店预约小程序搭建流程

随着科技的不断发展&#xff0c;小程序已经成为了人们生活中不可或缺的一部分。对于美容店来说&#xff0c;搭建一个预约小程序不仅可以提高工作效率&#xff0c;还可以增加客户数量、提高服务质量。那么&#xff0c;如何搭建一个美容店预约小程序呢&#xff1f;本文将为你详细…

Dockerfile 语法详解:构建定制化容器镜像的基石

Docker 已经成为现代应用程序开发和部署的关键工具之一。在 Docker 的世界中&#xff0c;Dockerfile 是一个至关重要的文件&#xff0c;它定义了如何构建容器镜像的步骤和配置。本文将深入探讨 Dockerfile 的语法&#xff0c;为您提供构建定制化容器镜像的基础知识。 Dockerfil…

React 全栈体系(十六)

第八章 React 扩展 五、Context 1. 代码 /* index.jsx */ import React, { Component } from react import ./index.css//创建Context对象 const MyContext React.createContext() const {Provider,Consumer} MyContext export default class A extends Component {state …

MySQL基础-多表查询

目录 简单概述 1.多表之间的关系 1.1 一对多/多对一 1.2 多对多 1.3 一对一 2. 多表查询-内连接 2.1 隐式内连接 2.2 显式内连接 2.3 内连接小结 3.多表查询-外连接 3.1 左外连接 3.2 右外连接 4.多表查询-自连接 4.1 应用 5.多表查询-联合查询 6.子查询 6.1 标量子…

黑马JVM总结(二十五)

&#xff08;1&#xff09;字节码指令-cinit 构造方法可以分为两类&#xff0c;一类是cinit 一类init cinit是整个类的构造方法 putstatic&#xff1a;进行static变量的赋值&#xff0c;是到常量池里找到名字一个叫做i的变量 &#xff08;2&#xff09;字节码指令-init in…

漫谈:C语言 C++ 左值、右值、类型转换

编程不是自然语言&#xff0c;编程自有其内在逻辑。 左值引起的BUG 编译器经常给出类似这样的BUG提示&#xff1a; “表达式必须是可修改的左值” “非常量引用的初始值必须是左值” 看一下示例&#xff1a; #include <iostream>void f(int& x) {} int main() {sho…

C#中实现单元测试的示例流程_MSTest测试项目

一、单元测试简介 1.1、单元测试简介 在《单元测试艺术》一书中对于单元测试的定义是&#xff1a;【一个单元测试是一段代码&#xff0c;这段代码调用一个工作单元&#xff08;指&#xff1a;调用软件中的一个方法&#xff0c;这个方法执行过程中所发生的所有行为以及最后产生…

Inno Setup安装中文语言

以版本6.2.2为例&#xff1a; 默认安装的Inno Setup是不支持中文语言的&#xff0c;需要我们自行下载安装。 一、打开官网Inno Setup Translations (jrsoftware.org) 下载的文件如下 二、然后重命名放到Inno Setup的如下安装目录中 三、然后重启Inno Setup即可。 打包后的…

家电行业 EDI:Miele EDI 需求分析

Miele是一家创立于1899年的德国公司&#xff0c;以其卓越的工程技术和不懈的创新精神而闻名于世。作为全球领先的家电制造商&#xff0c;Miele的经营范围覆盖了厨房、洗衣和清洁领域&#xff0c;致力于提供高品质、可持续和智能化的家电产品。公司的使命是为全球消费者创造更美…

SpringMVC 学习(二)Hello SpringMVC

3. Hello SpringMVC (1) 新建 maven 模块 springmvc-02-hellomvc (2) 确认依赖的导入 (3) 配置 web.xml <!--web/WEB-INF/web.xml--> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee…

maven清理本地仓库。删除_remote.repositories文件和删除失败的jar包

1.图预览 .bat文件要和仓库在同一平级目录 REPOSITORY_PATH要改成你自己仓库的地址 2、删除.lastUpdated文件(失败的jar包) 使用.bat文件 注明&#xff1a;REPOSITORY_PATHD:\software\Java\maven\repository 改成你仓库的地址 set REPOSITORY_PATHD:\software\Java\maven\rep…

河北吉力宝以步力宝健康鞋引发的全新生活生态商

在当今瞬息万变的商业世界中&#xff0c;成功企业通常都是那些不拘泥于传统、勇于创新的先锋之选。河北吉力宝正是这样一家企业&#xff0c;通过打造一双步力宝健康鞋&#xff0c;他们以功能性智能科技穿戴品为核心&#xff0c;成功创造了一种结合智能康养与时尚潮流的独特产品…

Zotero同步论文、笔记

之前用 Mendeley[1]看论文&#xff0c;看中几个功能&#xff1a; tags&#xff0c;多标签分类&#xff0c;类似微信分组&#xff0c;用来快速筛&#xff08;已添加的&#xff09;某一类文献&#xff1b;同步&#xff0c;包括 pdf 和笔记&#xff08;高亮、便签、tags&#xff…

数链科技基于PP-ChatOCR实现合同信息抽取,准确率达98%

传统大宗商品供应链领域数字化程度低&#xff0c;存在交易环节不透明、业务流程不标准、依赖主体信用评价等问题&#xff0c;业务中存在大量营业执照、身份证、终端合同等线下单据&#xff0c;严重依赖人工线下审核&#xff0c;且数字化难度大。 不同终端、机构、仓库的单据格式…

python使用websocket实现多端数据同步,多个websocket同步消息,断开链接自动清理

我使用的是flask_sock这个模块&#xff0c;我的使用场景是&#xff1a;可以让数据多端实时同步。在游戏控制后台和游戏选手的ipad上都可以实时调整角色的技能和点数什么的&#xff0c;所以需要这样的一个功能来实现数据实时同步。 下面是最小的demo案例&#xff1a; from fla…

LoadLibraryEx调用dll时有未经处理的异常,发生访问冲突

0x000000000006A220 处的第一机会异常(在 testHFHZDll.exe 中): 0xC0000005: 执行位置 0x000000000006A220 时发生访问冲突。 0x000000000006A220 处有未经处理的异常(在 testHFHZDll.exe 中): 0xC0000005: 执行位置 0x000000000006A220 时发生访问冲突。 最近做一个测试&#…

[C++随笔录] stack queue使用

stack && queue使用 stackqueue题目训练 stack 栈的特点是 先进后出(first in last out) 我们可以看出, stack的接口相比 vector/string/list 的接口少的太多了 构造函数 && 容器适配器 容器适配器的含义: 首先, 适配器 — — 用户传数据进来, 我们用合适的…