代码随想录训练营38天 || 322. 零钱兑换 279. 完全平方数 139. 单词拆分
322. 零钱兑换
思路:
动规5部曲:
1.确定dp数组以及下标的含义:
dp数组表示能凑出零钱的最少硬币数,下标表示要兑换的零钱
2.确定递推公式:
j为背包容量,i为物品的下标
dp[ j ] = min(dp[ j -coins[ i ] ] +1,dp [ j ])
3.dp数组的初始化:
dp[ 0 ]是背包容量为0的时候,硬币数量为0,因为递归公式是求最小的数值,所以初始化其他的数要是最大值,才不会影响结果。
4.确定遍历顺序
先遍历物品,再遍历背包,先遍历背包,再遍历物品都可以,不同的地方是,在先遍历物品,再遍历背包时,因为先遍历物品,所以j可以直接在coins[ i ]等于物品时开始,
for (int i = 0; i < coins.size(); i++) { // 遍历物品for (int j = coins[i]; j <= amount; j++) { // 遍历背包if (dp[j - coins[i]] != INT_MAX) { // 如果dp[j - coins[i]]是初始值则跳过dp[j] = min(dp[j - coins[i]] + 1, dp[j]);
但是先遍历背包,再遍历物品不同,此时由于先遍历背包,所以只能在遍历完物品后,在判断语句 if (i - coins[j] >= 0 && dp[i - coins[j]] != INT_MAX )中限制物品的重量大于背包容量的情况
for (int i = 1; i <= amount; i++) { // 遍历背包for (int j = 0; j < coins.size(); j++) { // 遍历物品if (i - coins[j] >= 0 && dp[i - coins[j]] != INT_MAX ) {dp[i] = min(dp[i - coins[j]] + 1, dp[i]);
代码:
class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount+1,INT_MAX);//dp数组的初始化dp[0] = 0;//组合问题for(int i=0;i <coins.size();i++){for(int j =coins[i];j<=amount;j++){if(dp[j-coins[i]] !=INT_MAX)//为了防止int溢出{dp[j] = min(dp[j],dp[j-coins[i]]+1);}}}if(dp[amount] == INT_MAX)return -1;//当硬币是双数,金额为单数时,无法找零所以无法凑齐return dp[amount];}
};
遇到的问题:
1. if(dp[j-coins[i]] !=INT_MAX)的作用是防止int溢出
279. 完全平方数
思路:
1.确定dp数组以及下标的含义:
dp[ j ]数组代表组成的平方数个数 ,下标表示和为j
2.确定递推公式:
dp[j] = min(dp[j],dp[j-coins[i]]+1);
3.dp数组的初始化:
因为递推公式要取最小值,为了避免影响结果,除了dp[ 0 ],都初始化为INT_MAX
4.确定遍历顺序
都可以
代码:
class Solution {
public:int numSquares(int n) {vector<int> dp(n+1,INT_MAX);//因为测试用例会导致溢出,所以使用更大的类型//dp数组的初始化dp[0] = 0;//遍历顺序for(int i = 0;i * i<=n;i++)//先物品{for(int j = i*i;j<=n;j++)//再背包{if(dp[j- i * i] !=INT_MAX){dp[j] =min(dp[j],dp[j-i*i]+1);}}}return dp[n];}
};
遇到的问题:
对于遍历顺序都可以的理解
139. 单词拆分
思路:
1.确定dp数组以及下标的含义:
dp[ i ] 表示当前拆解的字符串可以由物品(字符串)组成
2.确定递推公式:
if(dp[j] && find(wordDict.begin(),wordDict.end(), str) !=wordDict.end())
{
dp[i] = true;
}
递推公式是一个判断式
3.dp数组的初始化:
dp [ 0 ]要初始化为true否则后面都无法推出true
4.确定遍历顺序
类排列问题:先背包,后物品。
代码:
class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {vector<bool> dp(s.size()+1,false);//dp数组的初始化dp[0] = true;//类排列问题for(int i =1;i<=s.size();i++)//先背包{for(int j = 0;j < i;j++)//再物品{string str = s.substr(j,i-j);if(dp[j] && find(wordDict.begin(),wordDict.end(), str) !=wordDict.end()){dp[i] = true;}}}return dp[s.size()];}
};
遇到的问题:
对于推导过程的理解不到位
相关文章:
代码随想录训练营38天 || 322. 零钱兑换 279. 完全平方数 139. 单词拆分
322. 零钱兑换 思路: 动规5部曲: 1.确定dp数组以及下标的含义: dp数组表示能凑出零钱的最少硬币数,下标表示要兑换的零钱 2.确定递推公式: j为背包容量,i为物品的下标 dp[ j ] min(dp[ j -coins[ i…...
(最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题)
(最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题) 本套题目为硬件通用题目,适合多个岗位方向,如下 **岗位——硬件技术工程师 岗位意向…...
IOT项目——DIY Weather Station With ESP32
开源项目:ESP32 气象站 作者:GiovanniAggiustatutto 原文链接: ESP32 气象站 温度设备塔风向标风速计雨量计框架电子元件和压力传感器家庭助理配置及应用 气象站测量温度、湿度、气压、风速和风向以及降雨量。所有数据均由 ESP32收集…...
表格识别版面还原分析-GO语言集成-表格文字识别接口
数据驱动的时代,高效处理和分析各类文档中的信息变得尤为重要。无论是金融服务中的报表分析,制造与物流行业的库存管理,还是医疗卫生领域的病历记录,快速准确地将纸质或电子表格中的数据转换为可编辑、保存的电子数据成为提升工作…...
文件上传漏洞3
1. 例题:文件上传限制 1)上传漏洞靶场介绍 项目名称: upload-labs开发语言: 使用PHP语言编写功能定位: 专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场关卡数量: 目前共21关,每关包含不同上传方式注意事项: 每关没有固定通关方法,不要自限…...
一洽智能硬件行业解决方案探索与实践
一、智能硬件行业发展现状剖析 在数字化浪潮推动下,智能硬件行业呈现蓬勃发展态势。软硬件一体化的深度融合,构建起智能化服务的核心架构,而移动应用作为连接用户与设备的重要桥梁,其作用愈发关键。深入研究该行业,可…...
什么是snmp协议?在优雅草星云智控AI物联网监控系统中如何添加设备进行监控【星云智控手册01】-优雅草卓伊凡
什么是snmp协议?在优雅草星云智控AI物联网监控系统中如何添加设备进行监控【星云智控手册01】-优雅草卓伊凡 优雅草星云智控物联网设备 本产品即将在5月15日在优雅草科技的承办下召开产品发布会,本产品需要报名参加可以通过活动行搜索星云智控进行报名…...
神经网络权重优化秘籍:梯度下降法全解析(五)
引言 在神经网络的训练过程中,权重更新是提升模型性能的关键环节,而梯度下降法及其优化算法则是实现这一关键环节的核心工具。理解并掌握这些方法,对于打造高效的神经网络模型至关重要。本文将深入剖析梯度下降法在神经网络权重更新中的应用…...
输入框仅支持英文、特殊符号、全角自动转半角 vue3
需求:封装一个输入框组件 1.只能输入英文。 2.输入的小写英文自动转大写。 3.输入的全角特殊符号自动转半角特殊字符 效果图 代码 <script setup> import { defineEmits, defineModel, defineProps } from "vue"; import { debounce } from "…...
Python简介与入门
目录 Python初始 Python的优势 Python 的特性 Linux下安装Python windows 系统安装python Python的语法基础 标识符 注释 语句与缩进 Python 常用的数据类型 数字 字符串 列表 列表的定义 列表的取值 重复列表 元组 元组的操作 字典 字典的创建 字典的取值操作 字典的添加、…...
C++学习笔记(三十六)——STL之排序算法
一、STL 算法 C的STL(Standard Template Library) 提供了一组高效、通用的算法,这些算法适用于各种容器(如 vector、list、set、map)。 这些算法主要位于 <algorithm> 和 <numeric> 头文件中。 通用性&a…...
G1 人形机器人软件系统架构与 Python SDK
如果说人形机器人的硬件是它的“身体”,那么软件系统就是它的“大脑”和“神经系统”,负责接收信息、进行决策并控制身体行动。理解 G1 机器人的软件架构,特别是如何通过编程接口与其交互,是进行机器人开发的核心。本节将剖析 G1 …...
Redis在SpringBoot中的使用
在SpringBoot项目中使用redis存储数据作为字典 本项目使用jdk1.8 一、添加依赖 <!-- spring boot redis缓存引入 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>…...
SuperMap GIS基础产品FAQ集锦(20250421)
一、SuperMap iDesktopX 问题1:iDesktopX怎么根据对数据集中的每条记录进行批量布局出图? 11.3.0 【解决办法】打开地图系列设置功能,勾选启用并设置索引地图,索引图层和索引字段等参数,打印地图册,设置输出路径&am…...
Linux学习笔记2
1.man man指令相当于一个在线手册 使用q可以退出指令运行 例如,使用 man ls 指令可以得到以下运行结果: 在查找的时候还可以使用数字,使用 man man 指令,对应每个数字所表示的内容: 在Linux下,一切皆是文件…...
电脑安装adb并且连接华为手机mate60pro后查看设备
1.下载adb工具 下载地址: https://developer.android.google.cn/tools/releases/platform-tools?hlzh-cn#downloads 根据需要下载自己系统需要的安装包 下载后解压 2.配置adb工具环境变量 添加ADB_HOME D:\softwares\platform-tools-latest-windows\platform-…...
EAL4+与等保2.0:解读中国网络安全双标准
EAL4与等保2.0:解读中国网络安全双标准 在当今数字化时代,网络安全已成为各个行业不可忽视的重要议题。特别是在金融、政府、医疗等领域,保护信息的安全性和隐私性显得尤为关键。在中国,EAL4和等级保护2.0(简称“等保…...
树莓派学习专题<8>:使用V4L2驱动获取摄像头数据--获取摄像头支持的分辨率
树莓派学习专题<8>:使用V4L2驱动获取摄像头数据--获取摄像头支持的分辨率 1. 获取摄像头支持的分辨率2. 代码分析3. 树莓派实测 1. 获取摄像头支持的分辨率 使用如下代码获取摄像头支持的输出分辨率。 struct v4l2_frmsizeenum stFrameSize …...
CSS预处理器对比:Sass、Less与Stylus如何选择
引言 CSS预处理器已成为现代前端开发的标准工具,它们通过添加编程特性来增强纯CSS的功能,使样式表更加模块化、可维护且高效。在众多预处理器中,Sass、Less和Stylus是三个最流行的选择,它们各自拥有独特的语法和功能特点。本文将深…...
Vue3集成sass
安装依赖 pnpm add -D sass-embedded配置全局变量 新建文件 src/styles/variables.scss配置Vite 修改 vite.config.ts variables.scss $base-color: bluevite.config.ts // https://vite.dev/config/ export default defineConfig({plugins: [vue(),],resolve: {alias: {:…...
超越Dify工作流:如何通过修改QwenAgent的Function Call及ReAct方法实现对日期时间的高效意图识别
在构建复杂的AI应用时,意图识别是一个至关重要的环节。传统上,许多开发者会使用Dify工作流来完成这一任务,但在处理复杂意图时,这种方法往往需要大模型进行多级反复识别,从而带来较高的时间成本。 本文将介绍如何通过修改QwenAgent框架中的FnCallAgent和ReActChat类,实现…...
Lua 第8部分 补充知识
8.1 局部变量和代码块 Lua 语言中的变量在默认情况下是全局变量 ,所有的局部变量在使用前必须声明 。 与全局变量不同,局部变量的生效范围仅限于声明它的代码块。一个代码块( block )是一个控制结构的主体,或是一个函…...
Lua 第7部分 输入输出
由于 Lua 语言强调可移植性和嵌入性 , 所以 Lua 语言本身并没有提供太多与外部交互的机制 。 在真实的 Lua 程序中,从图形、数据库到网络的访问等大多数 I/O 操作,要么由宿主程序实现,要么通过不包括在发行版中的外部库实现。 单就…...
Java 中 == 和 equals() 的区别
1. 运算符 是 Java 中的比较运算符,用于比较两个变量的值是否相等,但具体行为取决于变量的类型: 类型 比较的内容基本类型直接比较值是否相等(如 int a 5; int b 5; a b 返回 true)引用类型比较内存地址&#x…...
Redis新节点加入集群会发生什么(面试题)
新加入主节点:会发生槽位数据重新分配迁移, 新加入从节点,会发生主从同步,全量同步和增量同步 当一个新节点加入 Redis 集群时,会触发一系列操作以确保集群的稳定性和数据的一致性。以下是新节点加入 Redis 集群时的详…...
dmncdm达梦新云缓存数据库主从集群安装部署详细步骤说明
dmncdm达梦新云缓存数据库主从集群安装部署详细步骤说明 1 环境介绍2 安装部署dmncdm2.1 196部署cdm环境2.2 197部署cdm环境2.3 190部署cdm环境 3 主备集群/主从集群配置4 部署主备集群/主从集群5 部署日志6 更多达梦数据库全方位指南:安装 优化 与实战教程 1 环境介绍 cpu x8…...
docker容器,mysql的日志文件怎么清理
访问问题 你的问题是因为在当前路径 /home/ictrek/data/ragflow-mysql 下没有名为 data 的子目录。以下是详细分析和解决方法: 错误原因 路径不存在 当前目录 /home/ictrek/data/ragflow-mysql 下没有名为 data 的子目录,执行 cd data/ 时会报错 No suc…...
kafka auto.offset.reset详解
在 Kafka 中,auto.offset.reset latest 的含义及行为如下: 1. 核心定义 当消费者组首次启动或无法找到有效的 offset(例如 offset 过期、被删除或从未提交)时,消费者会从分区的最新位置…...
设备制造行业如何避免项目管理混乱?
项目常因进度延误、成本超支或部门协作不畅而陷入混乱? 这不仅拖累项目交付,还可能损害客户信任和企业利润。设备制造行业的项目管理复杂多变,从需求获取到生产交付再到售后运维,每一个环节都可能成为效率的瓶颈。 如何破解这一…...
kubernetes》》k8s》》删除命名空间
使用 kubectl delete ns 命名空间 --force --grace-period0 如果还删除不掉 需要 kubectl get namespace 命名空间 -o json > x.json vim x.json kubectl replace --raw “/api/v1/namespaces/命名空间/finalize” -f ./x.json...
【深度学习新浪潮】新视角生成的研究进展调研报告(2025年4月)
新视角生成(Novel View Synthesis)是计算机视觉与图形学领域的核心技术,旨在从单张或稀疏图像中生成任意视角的高保真图像,突破传统多视角数据的限制,实现对三维场景的自由探索。作为计算机视觉与图形学的交叉领域,近新视角生成年来在算法创新、应用落地和工具生态上均取…...
55、Spring Boot 详细讲义(十一 项目实战)springboot应用的登录功能和权限认证
项目文档:springboot应用的登录功能和权限认证 一、项目概述 1. 项目简介 本项目是在一个基于Spring Boot的Web应用中实现登录功能和权限认证。要求实现登录功能,用户登录成功以后,会给前台返回当前登录用户可以访问的权限菜单,比如超级管理员可以访问所有权限,产品管理…...
react 父子组件通信 子 直接到父, 父 forwardref子
React核心概念:单向数据流(Unidirectional Data Flow) React 中数据的流动像瀑布一样,只能从上层组件(父组件)流向下层组件(子组件)。 子组件无法直接反向修改父组件的数据&#x…...
基于TCP的协议
目录 TCP 基于TCP的应用层协议: TCP的工作方式 TCP TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它为应用层提供了一个可靠的端到端的数据传输服务。再TCP/IP模型中,TCP位于传输层,负责再…...
性能比拼: Go vs Java
本内容是对知名性能评测博主 Anton Putra Go (Golang) vs Java: Performance Benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中,我们将比较 Go 和 Java。 我们将基于 Golang 的 Fiber 框架和 Java 的 Spring Boot 创建几个简单的应用…...
【Spring】单例作用域下多次访问同一个接口
在Spring框架中,Controller和Service的Bean默认都是单例(Singleton)的。在多个请求同时访问Controller时,Service的Bean调用情况如下: 1. 核心机制 单例Bean:Spring容器为每个Bean定义(如Serv…...
数据库介绍
1、什么是数据库 数据库是一个“广义的概念" 1. 表示一门学科 2. 表示一类软件,管理数据的软件 3. 表示某一个具体的数据库软件 4. 表示部署了某个数据库软件的主机(电脑) 本专栏介绍的是具体的数据库软件:MySQL 数据库软件的主要功能是对数据的增删…...
Spring XML 配置
Spring XML 配置是 Spring Framework 的传统配置方式,通过 XML 文件定义 Bean、依赖注入、AOP 等核心功能。以下是详细的 Spring XML 配置解析: 一、基础配置 1. XML 配置文件结构 <?xml version"1.0" encoding"UTF-8"?> …...
AI数字人:品牌营销的新宠与增长密码(6/10)
摘要:AI数字人凭借低成本、高可控性与强互动性等优势,正成为品牌营销新宠。通过技术驱动,AI数字人从虚拟形象发展为智能交互的数字化身,广泛应用于直播、客服、内容生产等营销场景,助力品牌提升营销效果与用户互动体验…...
CentOS笔记本合上盖子不休眠
通过修改 /etc/systemd/logind.conf 文件中的 HandleLidSwitch 和 HandleLidSwitchDocked 设置为 ignore,可以实现合上笔记本盖子时不休眠的效果。如果有其他电源管理工具或桌面环境的设置干扰,也需要一并调整。 // 切换到root用户 su root// logind.co…...
Vue.js 之 `v-for` 命令详解
Vue.js 之 v-for 命令详解 在 Vue.js 中,v-for 是一个非常强大的指令,用于遍历数组或对象中的数据,并渲染相应的 DOM 元素。无论是在列表展示、表单生成还是动态组件加载中,v-for 都发挥着重要作用。本文将详细介绍 v-for 的用法…...
Linux命令-pidstat
pidstat命令是一个用于监控系统中各个进程活动的性能监控工具。它能够实时输出每个进程的 CPU、内存、I/O 等关键性能指标。以下是关于 pidstat 命令的详细介绍: 语法 pidstat [选项] [时间间隔] [次数]常用选项 -h 或 --help :显示帮助信息。 -v &…...
map和set
1.序列式容器和关联式容器 在认识map和set之前,关于容器,有两个重要的分类 序列式容器关联式容器 序列式容器:按照元素插入的顺序保存数据,关注元素的顺序和位置,因为逻辑结构为线性序列的数据结构,两个位…...
CentOS 6.9 安装 Zabbix 3.0 详细教程
一、引言 在 Linux 环境下,有许多实用的系统监控软件,如 Nagios、Cacti、Zabbix、Monit等。这些开源软件能帮助我们更好地管理机器,及时发现问题并警告系统维护人员。今天我们将重点研究 Zabbix,使用它的目的是为了更好地监控MySQ…...
通俗的理解TCP的三次握手四次挥手
前言 本文是博主根据自身理解,尽量用最通俗的形式解释TCP的三次握手四次挥手。 一、三次握手:为什么不是两次或四次? 1. 三次握手过程 SYN:客户端发送SYN1, seqx(我要连接)SYNACK:服务器回复…...
【Python进阶】正则表达式实战指南:从基础到高阶应用
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:邮箱格式验证案例2:提取电话号码案例3:替换敏感信息 运行…...
linux下内存地址数学运算
如下代码计算地址并16字节对齐: char* buffer (char*)malloc(a3 0x1000);unsigned long long tmp (((unsigned long long)buffer 0x10) & 0xffffffffffffff00);char* buf (char*)tmp;假如把地址当作整数,加减程序运算,直接转换是不行…...
考研单词笔记 2025.04.22
abuse v/n滥用,妄用,虐待,伤害 adopt v采用,采纳,收养,领养,正式通过,批准 apply v应用,运用,申请,适用,有效 deploy v有效利用&am…...
JVM虚拟机-类加载器、双亲委派模型、类装载的执行过程
一、什么是类加载器,类加载器有哪些 我们目前要讲的就是类加载子系统,主要作用是将java源码编译为class字节码文件后装载到运行时数据区,运行时数据区就可以去分配内存再通过执行引擎来执行java代码。 启动类加载器(也称引导类加载器)&…...
神经网络的 “成长密码”:正向传播与反向传播深度解析(四)
引言 在神经网络的神秘世界里,正向传播和反向传播是驱动模型学习和进化的核心机制。它们如同神经网络的 “左右脑”,正向传播负责信息的前向流动与初步处理,反向传播则通过优化权重参数来提升模型性能,二者相辅相成,共…...