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

【Hot 100】322. 零钱兑换

目录

  • 引言
  • 零钱兑换
    • 我的解题
    • 代码优化
      • 优化点分析
      • 复杂度分析
      • 边界情况处理

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:【Hot 100】322. 零钱兑换
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

引言

零钱兑换

  • 🎈 题目链接:
  • 🎈 做题状态:

我的解题

开始对dp数组的定义有了一点感觉。题目是求解凑齐 amount 的最小硬币数量,所以 dp 数组就是从 0 到 amount 的一个数组。依次状态转移。直到计算出 dp[amnout]。

class Solution {
public:int coinChange(vector<int>& coins, int amount) {// dp核心三部曲:定义、转移方程、初始化vector<int> dp(amount + 1, 0);for (int i = 1; i < dp.size(); ++i){// 遍历硬币类型int minCount = INT_MAX;for (int j = 0; j < coins.size(); ++j){// 判断当前索引合法,并且上一个状态能够凑齐硬币。if (i - coins[j] >= 0 && dp[i - coins[j]] != -1){minCount = min(minCount, dp[i - coins[j]]);}}// 如果当前金额数无法凑成if (minCount == INT_MAX) {dp[i] = -1;continue;}dp[i] = minCount + 1;}return dp[amount];}
};

代码优化

class Solution {
public:int coinChange(vector<int>& coins, int amount) {// 初始化dp数组:dp[i]表示凑齐金额i所需的最小硬币数vector<int> dp(amount + 1, amount + 1); // 初始化为不可能的大值dp[0] = 0;  // 金额0需要0个硬币for (int i = 1; i <= amount; ++i) {for (int coin : coins) {if (coin <= i) { // 硬币面值不超过当前金额dp[i] = min(dp[i], dp[i - coin] + 1);}}}return dp[amount] > amount ? -1 : dp[amount];}
};

优化点分析

  1. 初始化优化

    • 原代码:dp[0]=0(隐式),其他位置在循环中计算
    • 新代码:显式设置dp[0]=0,其他位置初始化为amount+1(一个不可能达到的较大值)
    • 优势:避免了对-1的特殊判断,简化状态转移逻辑
  2. 状态转移优化

    • 原代码:需要检查dp[i-coin] != -1并维护minCount
    • 新代码:直接比较dp[i]dp[i-coin]+1,无需中间变量
    • 优势:代码更简洁,减少分支判断,运行效率更高
  3. 返回条件优化

    • 原代码:依赖循环中设置的-1
    • 新代码:三元表达式直接判断dp[amount] > amount
    • 优势:逻辑更清晰,避免特殊值传递

复杂度分析

  • 时间复杂度:O(amount * n),其中n为硬币种类数
  • 空间复杂度:O(amount)
  • 优势:避免特殊值判断,减少分支预测失败,常数时间更优

边界情况处理

  1. amount=0:直接返回0(dp[0]=0
  2. 无解情况:最终返回-1dp[amount] > amount时)
  3. 大金额优化:若硬币含1元,最大硬币数=amount,故amount+1是安全阈值
http://www.lqws.cn/news/167725.html

相关文章:

  • 基于SSM框架的医院电子病历管理系统,分为用户网页和管理后台,包括科室模块、医生模块、预约挂号模块、就诊记录模块、就诊评价模块、轮播图模块和系统基础模块
  • HZOJ新手村前段时间的刷题的笔记
  • C++类二
  • 使用 Zabbix 官方 Nginx 模板的详细指南
  • Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合
  • Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
  • ArcGIS Maps SDK for JavaScript:使用图层过滤器只显示FeatureLayer的部分要素
  • B+树知识点总结
  • ArcGIS Pro 3.4 二次开发 - 宗地
  • TDengine 开发指南—— UDF函数
  • 小白升级的路-电子电路
  • 物流瘫痪预警:亚马逊多仓爆仓,卖家如何抢占夏季性价比市场?
  • halcon c# 自带examples报错 Matching
  • Offline Transition Modeling via Contrastive Energy Learning
  • 6月生效!亚马逊FBA入库运费调整,尺寸不符自动补差
  • springcloud openfeign 偶现 Caused by: java.net.UnknownHostException
  • 图像测试点列表
  • 60天python训练计划----day45
  • 数据分析Agent构建
  • 图简记。。
  • 线段树~~~
  • sockaddr结构体详解
  • graylog收集rsyslog实现搜索解析
  • ubuntu24.04 搭建 java 环境服务,以及mysql数据库
  • Calendar类日期设置进位问题
  • 基于Pandas数据分析的设备巡检计划生成算法设计及实现
  • jdk-8u281-linux-x64.rpm,备用网盘下载,懒得注册官方来看看
  • Unknown key: ‘auto_activate_base‘解决
  • 适用于vue3的移动端Vant4组件库
  • Java编程课(一)