当前位置: 首页 > news >正文

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]

相关文章:

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 伪代码 + 逐…...

基于工业互联网打造敏捷供应链的实现方式:创新路径与实践应用

引言 工业互联网和敏捷供应链是当今制造业发展中的两个重要概念。工业互联网以数字化、网络化和智能化为核心&#xff0c;致力于将传统工业生产与互联网技术相融合&#xff0c;从而实现生产过程的高效、智能和灵活。而敏捷供应链则强调快速响应市场需求、灵活调整生产和供应计划…...

碳化硅柱式膜的广泛应用

碳化硅柱式膜是一种高性能的过滤材料&#xff0c;以其独特的性质和广泛的应用领域在现代工业中占据着重要地位。以下是对碳化硅柱式膜的详细介绍&#xff1a; 一、基本概述 碳化硅柱式膜是以碳化硅超滤膜为过滤单元构成的&#xff0c;其过滤精度高达0.1微米。这种膜材料具有耐化…...

【QT】QFont字体设置

设置字体大小 f.setPointSize(12); // 设置字体大小为12点设置字体加粗 f.setBold(true); // 使字体加粗设置字体斜体 f.setItalic(true); // 使字体斜体设置字体下划线 f.setUnderline(true); // 给字体添加下划线设置字体删除线 f.setStrikeOut(true); // 给字体添加删除…...

Vue3+vite部署nginx的二级目录,使用hash模式

修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…...

云南区块链商户平台发票助手成品

目录 1 概述2 功能对比3 项目演示图4 核心逻辑4.1智能赋码4.2 解密方法4.3 登录与检测4.4 发票金额大写转换4.5 检查登录是否失效4.6 验证码识别5 演示效果6 项目部署6.1 Web站点部署6.1.1 环境6.1.2 前端6.1.3 后端6.2 Docker部署6.2.1 构建镜像6.2.2 创建容器6.3.3 访问项目域…...

AI图书推荐:检索增强生成RAG赋能大语言模型

本书《检索增强生成RAG赋能大型语言模型》&#xff08;Retrieval-Augmented Generation - Dr. Ray Islam &#xff1a;Mohammad Rubyet &#xff09;深入探讨了如何通过结合检索系统与神经语言模型&#xff0c;提升人工智能在自然语言处理领域的能力。 以下是各章节内容的概要&…...

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础&#xff0c;在线资源便于查漏补缺&#xff0c;自学实验强化理解&#xff0c;论坛互动解决疑难&#xff0c;结合实际项目应用提高实践技能。结合项目学习是最高效…...

C语言 | Leetcode C语言题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> singleNumbers(vector<int>& nums) {int eor 0;for (int num:nums)eor ^ num;int rightOne eor & (~eor 1); // 提取出最右的1int onlyOne 0;for (int cur : nums) {if ((cur…...

如何利用Varjo混合现实技术改变飞机维修训练方式

自2017年以来&#xff0c;总部位于休斯顿的HTX实验室一直在推进混合现实技术&#xff0c;与美国空军密切合作&#xff0c;通过其EMPACT平台提供可扩展的沉浸式飞机维护虚拟现实培训。 虚拟和混合现实对维修训练的好处&#xff1a; l 实践技能&#xff1a;提供一个非常接近真实场…...

C++:按指定字符分割字符串

按指定字符分割字符串 [C]对string按指定分隔符分割(split) #include <iostream> #include <vector> #include <string> #include <sstream> using namespace std; int main() {string origin_str "hello world !"; // 需要进行分割的字符串…...

网络网络层之(6)ICMPv4协议

网络网络层之(6)ICMPv4协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…...

Opengrok代码在线查看平台

OpenGrok 是一个基于 Web 的源代码搜索引擎和交叉引用工具&#xff0c;它可以用来浏览和搜索代码库。虽然 OpenGrok 提供了代码搜索、查看文件和历史等功能&#xff0c;但它本身不是一个完整的在线集成开发环境&#xff08;IDE&#xff09;。然而&#xff0c;OpenGrok 可以作为…...

济南适宜地提取

题目: 网上下载中国的DEM、土地利用地图(1980、2000、2015年的)和一张最新济南市行政区划 图(要求:莱芜市并入济南后的区划图); 2.网上下载中国2015年年平均降水空间插值数据;3..网上下载中国2015年年平均气温空间插值数据; (注:以上数据可到资源环境科学与数据中心下载http…...

Windows 安装虚拟机(VMware+Ubuntu18.04)

Windows下虚拟机安装 一、资源下载1.1 VMware安装包下载1.2 Ubuntu镜像下载二、电脑分区三、Vmware安装四、Vmware检查4.1 注册信息查看4.2 检查网络适配器五、Ubuntu安装5.1 创建新的虚拟机5.2 打开虚拟机这是一篇介绍在Windows系统上安装Ubuntu虚拟机的操作教程。 一、资源下…...

图像算法---自动对焦AF

一&#xff0c;CDAF反差对焦原理 CDAF&#xff0c;全称Contrast Detection Auto Focus&#xff0c;即反差式对焦或对比度检测自动对焦&#xff0c;是一种广泛应用于入门级数码相机和相机模块化智能手机上的自动对焦技术。以下是关于CDAF反差对焦的详细介绍&#xff1a; 工作原…...

sqli-labs 靶场 less-5、6 第五关和第六关:判断注入点、使用错误函数注入爆库名、updatexml()函数

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它&#xff0c;我们可以学习如何识别和利用不同类型的SQL注入漏洞&#xff0c;并了解如何修复和防范这些漏洞。Less 5 SQLI DUMB SERIES-5 判断注入点&#xff1a;1. 首先&#xff0c;尝试正常的回显内容&#x…...

WebSocket详解与封装工具类

一、前言 在我们了解websocket之前&#xff0c;不妨先想想这几个问题&#xff1a; websocket是什么&#xff1f;websocket有什么好处和特点&#xff1f;为什么要用到websocket&#xff1f;什么情况下会用到websocket&#xff1f; 好了&#xff0c;带着这几个疑问一起来了解一…...

Linux学习, 进程和线程

进程 正在运行中的程序就是一个进程&#xff0c;进程有自己独有的内存空间和文件等等资源&#xff0c;进程中的资源一般都是相互隔离的。 进程内部还可以包含有多个线程&#xff0c;线程基本没有自己独占的资源&#xff08;独有栈除外&#xff09;&#xff0c;他与进程内的其…...

SVM模型实现城镇居民月平均消费数据分类

SVM模型实现城镇居民月平均消费数据分类 一、SVM支持向量机简介二、数据集介绍三、SVM建模流程及分析一、SVM支持向量机简介 支持向量机是由感知机发展而来的机器学习算法,属于监督学习算法。支持向量机具有完备的理论基础,算法通过对样本进行求解,得到最大边距的超平面,并…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...