LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划

LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划


文章目录

  • LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划
  • 前言
  • 一、题目概述
  • 二、解题方法
    • 2.1 一维表格的自底向上动态规划
      • 2.1.1 思路讲解
      • 2.1.2 伪代码 + 逐步输出示例
      • 2.1.3 Python代码如下
      • 2.1.4 C++代码如下
    • 2.2 二维表格的自底向上动态规划
      • 2.2.1 思路讲解
      • 2.2.2 伪代码 + 逐步输出示例
      • 2.2.3 Python代码如下
      • 2.2.4 C++代码如下
    • 2.3 方法对比
  • 三、英语词汇


前言

LeetCode位置:416. 分割等和子集

日常刷题,维持手感,同步学习英语,刷题顺序参考B站UP@justyyuk的系列视频,感兴趣的点波关注。
学海无涯,大路千万,感恩此程,彼此真诚陪伴!
在这里插入图片描述
Ps:第一次刷到的道友留步,这里拉齐一下信息。文章主要记录视频中的主要内容,算法思路会按照个人理解,用伪代码+举例每步输出的方式呈现。代码部分会以Python和C++语法进行呈现。文章最后会总结一些英语词汇。OK,就啰嗦这么多,开始进步[干杯🐱‍👓]


一、题目概述

Day3

输入:nums列表
输出:bool值,表示原始列表是否存在和相等的两个子列表

PS:

  1. 子序列 (Subsequence/Subset):

    • 子序列是通过从原始序列中删除一些或不删除任何元素且不改变剩余元素顺序而得到的序列。
    • 例子:对于序列 [1, 2, 3, 4],[1, 3, 4] 和 [2, 4] 是子序列。
    • 注意:[1, 4, 3] 不是 子序列,因为顺序改变了。
  2. 子列表 (Sublist)

    • 子列表是列表的连续部分,意味着元素必须是连续的。
    • 例子:对于列表 [1, 2, 3, 4],[2, 3] 和 [1, 2, 3]是子列表。
    • 注意:[1, 3] 不是 子列表,因为它不是连续的。
  3. 子数组 (Subarray):

    • 类似于子列表,子数组是数组的连续部分。
    • 例子:对于数组 [1, 2, 3, 4],[2, 3] 和 [1, 2, 3] 是子数组。
    • 注意:[1, 3] 不是 子数组,因为它不是连续的。
  • 在许多情况下,当数据结构是数组或列表时,“子列表”和“子数组”可以互换使用,但“子数组”一词专门用于数组。

二、解题方法

2.1 一维表格的自底向上动态规划

2.1.1 思路讲解

动态规划策略 :
本题与昨天的是同一道题,不过这次采用自底向上(表格法)的动态规划策略。此处有两种方法,一种使用到一维表格,一种使用二维表格。

  • 一维表格:用表格长度表示待达成目标,即数组和的一半(+1),表格内的值(True/False)表示子序列是否选择当前元素

    • 表格长度:表格 dp 的长度为 half + 1,其中 half 是数组总和的一半。这意味着我们试图判断是否存在一个子集,使其和为 0 到 half 之间的任何值。
    • 表格的值:dp[i] 是一个布尔值,表示是否存在一个子集,其和等于 i。
    • 初始化:dp[0] 被初始化为 True,因为和为 0 的子集总是存在的(空集)。其他位置被初始化为 False。
    • 状态转移:
    • 对于数组中的每一个元素 num,从后向前遍历 dp 数组(从 half 到 num),更新 dp 数组的值。
    • 更新规则为:dp[i] = dp[i] or dp[i - num]。这意味着如果存在一个子集和为 i - num,那么加上 num 后,和为 i 的子集也存在。

具体步骤:

  1. 计算总和:total = sum(nums),如果 total 是奇数,返回 False。
  2. 计算目标子集和:half = total // 2。
  3. 初始化 dp 数组:dp = [False for _ in range(half + 1)],并设 dp[0] = True。
  4. 遍历 nums 更新 dp 数组:
    • 对每个 j(来自 nums),从 half 到 j 更新 dp。
    • 如果 j <= i,则 dp[i] = dp[i] or dp[i - j]。
  5. 返回 dp[half],表示是否存在一个子集其和为 half。

2.1.2 伪代码 + 逐步输出示例

# 伪代码示例
函数 canPartition(nums):total = nums 的和如果 total 是奇数:返回 Falsehalf = total // 2dp = 长度为 half + 1 的布尔数组,所有元素初始化为 Falsedp[0] = True对于 nums 中的每一个 num:从 half 到 num 遍历 i:如果 dp[i - num] 为 True:dp[i] = True返回 dp[half]# 逐步输出示例:
输入:[1, 2, 1]
初始化
•	total = 1 + 2 + 1 = 4
•	half = 4 // 2 = 2
•	dp = [True, False, False](长度为 half + 1)
处理第一个元素 1
•	遍历 i 从 21(倒序)o	i = 2: dp[2] = dp[2] or dp[1] -> False or False = Falseo	i = 1: dp[1] = dp[1] or dp[0] -> False or True = True
•	更新后的 dp: [True, True, False]
处理第二个元素 2
•	遍历 i 从 22(倒序)o	i = 2: dp[2] = dp[2] or dp[0] -> False or True = True
•	更新后的 dp: [True, True, True]
处理第三个元素 1
•	遍历 i 从 21(倒序)o	i = 2: dp[2] = dp[2] or dp[1] -> True or True = Trueo	i = 1: dp[1] = dp[1] or dp[0] -> True or True = True
•	更新后的 dp: [True, True, True]
最终结果
•	返回 dp[half]

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

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

相关文章

002.数据分析_Pandas初识

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

MySQL-权限管理(二)

一 host中的含义 /usr/local/mysql/bin/mysql -pLXYlxy2:024.#8u} -S /data/mysql/tmp/mysqld.sock select user,host,authentication_string from mysql.user; %:主要允许从任何主机连接到MySQL服务器&#xff0c;即外部连接localhost: 代表只允许本地主机连接到MySQL服务器&…

[AIGC] 详解Mockito - 简单易学的Java单元测试框架

在Java的世界中, 单元测试是一项非常重要的任务. Mockito作为一个强大灵活的mock框架&#xff0c;可以帮助我们有效的编写和管理我们的单元测试. 了解并掌握Mockito的使用对于提高我们的开发效率和保证我们的软件质量有着巨大的帮助. 文章目录 什么是Mockito?Mockito的核心API…

Spring Boot中整合Jasypt 使用自定义注解+AOP实现敏感字段的加解密

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

奥威BI零售数据分析方案的优缺点一览

奥威BI零售数据分析方案是一套基于BI大数据智能可视化分析系统&#xff0c;根据零售企业数据分析共性需求、业务特殊性量身打造&#xff0c;点击下载应用&#xff0c;立即将零售数据情况分析清楚&#xff0c;直观呈现。很多企业都是直接在该零售数据分析方案的基础上实现了智能…

mybatis动态SQL的if判断是否等于某个值查询条件无效

我们在使用mybaits时&#xff0c;经常使用if条件来做动态查询&#xff0c; 当查询条件是字符串类型时&#xff0c;要写不等于某个空的情况要考虑不等于null和不等于空字符串 当查询条件是日期类型或者long&#xff0c;Integer 等类型时&#xff0c;if条件里不能写不等于空字符串…

Junit(Java单元测试)

配置文件 要想使用 Junit 进行单元测试需要引入以下第三方库&#xff1a; 引入后可以使用 Test&#xff0c;BeforeEach等注解 <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter<…

eclipse添加maven插件

打开eclipse菜单 Help/Install New SoftwareWork with下拉菜单选择 2022-03 - https://download.eclipse.org/releases/2022-03‘type filter text’搜索框中输入 maven选择 M2E - Maven Integration for Eclipse一路next安装&#xff0c;重启eclipseImport项目时&#xff0c;就…

ESP8266在阿里云上线(arduino)

电脑连接上ESP8266的板子 在arduino编写代码&#xff08;arduino按照之前的配置&#xff0c;已安装好esp的开发板和几个库ArduinoJson我选了5.的版本&#xff0c;PubSubclient,Crypto,AliyunIoTSDK并且修改pubsubclient的参数&#xff09; 在项目&#xff0c;加载库&#xff0c…

【RuoYi】如何解决Postman无法访问RuoYi中的接口数据

一、前言 最近&#xff0c;写项目要求需要将数据返回&#xff0c;指定的接口&#xff0c;并且需要使用Postman来测试接口数据&#xff0c;看是否能够请求到数据。然后项目用的是RuoYi的框架&#xff0c;RuoYi使用了SpringSecurity来做的安全框架&#xff0c;所以在访问的时候&a…

【Linux】ip命令详解

Linux网络排查 目录 一、ip命令介绍 1.1 ip命令简介 1.2 ip命令的由来 二、ip命令使用帮助 2.1 ip命令的help帮助信息 2.2 ip命令对象介绍 2.3 ip命令选项介绍 三、查看网络信息 3.1 显示当前网络接口信息 3.2 显示网络设备运行状态 3.3 显示详细设备信息 3.4 查看…

面向大模型的存储加速方案

参考&#xff1a;面向大模型的存储加速方案设计和实践-百度开发者中心 (baidu.com) 对于一个典型的训练来说&#xff0c;可能迭代多轮 epoch。在每个 epoch 内&#xff0c;首先需要对数据集进行随机打散&#xff0c;然后将打散后的数据划分为若干 batch&#xff0c;每读取一个 …

智谱AI最新开源模型CHATGLM4-9B试用

智谱AI最近开源了GLM4-9B模型。之前已开源chatglm1到chatglm3&#xff0c;相比前面开源的相比GLM3-6B有了大幅度提升。本次开源基本的GLM4-9B&#xff0c;还开源了对话版GLM-4-9B-Chat&#xff0c; 多模态版GLM-4V-9B&#xff0c; 长文本版GLM-4-9B-Chat-1M。 在语义、数学、推…

软件杯 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

零拷贝技术

背景 磁盘可以说是计算机系统重最慢的硬件之一&#xff0c;读写速度相对内存10以上&#xff0c;所以针对优化磁盘的技术非常的多&#xff0c;比如&#xff1a;零拷贝、直接I/O、异步I/O等等&#xff0c;这些优化的目的就是为了提高系统的吞吐量&#xff0c;另外操作系统内核中的…

GAT1399协议分析(8)--ImageInfo字段详解

一、官方定义 接上一章节字段消息返回内容 "ImageInfo": { "ImageID": "34078100001190001002012024060513561300065", "InfoKind": 0, "ImageSource": "…

eclipse怎么导入python项目

python项目导入eclipse的步骤&#xff1a; 1、首先&#xff0c;打开Eclipse集成开发程序&#xff0c;在菜单栏上点击“File(F)”&#xff0c;在弹出来的列表中点击“导入&#xff08;I&#xff09;...”。 2、在弹出来的“导入”窗口中&#xff0c;选择“常规”选项中的“现有…

【uni-app】开发问题汇总

文章目录 1、APP获取dom2、添加页面&#xff0c;参考其他页面&#xff0c;国际化就是对应页面的导航的国际化"navigationBarTitleText": "%m.i.ForgetPaymentPassword.bartitle%",3、setStatusBarStyle这个导航栏设置方法不要了&#xff0c;导航栏现在都用…

SpringCloud Gateway中Filters详细说明

前面 https://blog.csdn.net/J080624/article/details/139494909 我们研究了GateWay中各种路由断言的使用。SpringCloud GateWay 还提供了各种过滤器用来对请求和响应进行处理。 官网地址&#xff1a;SpringCloud Gateway Filter 【1】GatewayFilter Factories 路由过滤器允…

DVWA-CSRF

CSRF Low 观察后端代码&#xff0c;只要password_new等于password_conf就可以修改密码。由于这两个参数是通过GET传递的&#xff0c;所以直接构造payload。 http://192.168.20.156/DVWA/vulnerabilities/csrf/?password_newpass&password_confpass&ChangeChange# 这…