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

全国公共资源交易平台重庆百度快速优化

全国公共资源交易平台,重庆百度快速优化,网页制作源码免费,做catalog的免费网站题目 322. 零钱兑换 中等 相关标签 广度优先搜索 数组 动态规划 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组…

题目

322. 零钱兑换

中等

相关标签

广度优先搜索   数组   动态规划

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。

示例 1:

输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1

示例 2:

输入:coins = [2], amount = 3输出:-1

示例 3:

输入:coins = [1], amount = 0
输出:0

提示:

  • 1 <= coins.length <= 12
  • 1 <= coins[i] <= 231 - 1
  • 0 <= amount <= 104

思路和解题方法

  1. 目标和的定义:这个问题的目标是计算凑出目标金额所需的最少硬币数量。

  2. 动态规划的思路:该代码使用了动态规划的思想,将原问题拆解为子问题,并利用已解决的子问题的解来求解更大规模的问题。

  3. dp 数组的定义:代码创建了一个大小为 amount+1dp 数组,用于保存计算中间状态的结果。dp[i] 表示组成金额 i 所需的最少硬币数量。

  4. 初始化:将 dp[0] 初始化为 0,表示组成金额为 0 不需要任何硬币。其他位置的 dp 数组元素初始化为 INT_MAX,表示初始时无法凑出对应的金额。

  5. 状态转移方程:采用两层循环来遍历物品和背包。外层循环遍历所有可用的硬币面额,内层循环遍历目标金额从该硬币面额开始到 amount。这样可以逐步更新 dp 数组,计算得到凑出每个目标金额所需的最少硬币数量。

  6. 状态转移:对于当前的目标金额 j,我们检查 dp[j - coins[i]] 是否不是初始值 INT_MAX。如果不是初始值,则表示可以通过使用当前硬币面额 coins[i] 得到目标金额 j。我们比较使用当前硬币和不使用当前硬币两种情况下所需的硬币数量,并取最小值作为 dp[j] 的解。

  7. 返回结果:最后,我们返回 dp[amount] 的值作为结果。如果 dp[amount] 仍为初始值 INT_MAX,表示无法凑出目标金额,因此返回 -1。

总结起来,这段代码使用动态规划的思想,通过构建一个 dp 数组来保存计算中间状态的结果。通过遍历物品和背包,并利用已解决子问题的解,逐步计算得到组成目标金额所需的最少硬币数量。最终,返回 dp[amount] 的值作为结果。

复杂度

        时间复杂度:

                O(n * amount)

时间复杂度:

  • 外层循环遍历硬币列表的长度,即 coins 的大小,所以时间复杂度为 O(n),其中 n 是硬币列表的长度。
  • 内层循环遍历目标金额 amount,所以时间复杂度为 O(amount)。

综合起来,总的时间复杂度为 O(n * amount)。

        空间复杂度

                O(amount)

空间复杂度:

  • 创建了一个大小为 amount+1 的 dp 数组,所以空间复杂度为 O(amount)。

因此,该算法的空间复杂度为 O(amount)。

c++ 代码

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX); // 创建大小为 amount+1 的 dp 数组,初始值设置为 INT_MAXdp[0] = 0; // 对于组成金额为 0 的情况,方法数为 0for (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]); // 更新组成金额 j 的最小方法数}}}if (dp[amount] == INT_MAX) return -1; // 如果无法组成金额 amount,则返回 -1 表示无解return dp[amount]; // 返回组成金额 amount 的最小方法数}
};
  • vector<int> dp(amount + 1, INT_MAX);:创建大小为 amount+1 的 dp 数组,用于保存组成不同金额的最小硬币数。初始值设置为 INT_MAX,表示初始状态下无解。
  • dp[0] = 0;:对于金额为 0 的情况,不需要使用任何硬币,所以最小硬币数为 0。
  • for (int i = 0; i < coins.size(); i++):外层循环遍历硬币面额(物品),以便逐个考虑每个硬币的组合方式。
  • for (int j = coins[i]; j <= amount; j++):内层循环遍历目标金额(背包),从当前硬币面额开始,直到目标金额 amount。这样可以确保只考虑能够达到的金额。
  • if (dp[j - coins[i]] != INT_MAX):如果 dp[j - coins[i]] 不是初始值(即存在组合方式),则进入条件判断。
  • dp[j] = min(dp[j - coins[i]] + 1, dp[j]);:更新组成金额 j 的最小硬币数。在当前硬币面额 coins[i] 的情况下,组成金额 j 的最小硬币数为 dp[j - coins[i]] + 1 和当前 dp[j] 的较小值。
  • if (dp[amount] == INT_MAX) return -1;:如果无法组成金额 amount,则返回 -1 表示无解。
  • return dp[amount];:返回组成金额 amount 的最小硬币数。

Java代码

class Solution {public int coinChange(int[] coins, int amount) {int max = Integer.MAX_VALUE;int[] dp = new int[amount + 1];//初始化dp数组为最大值for (int j = 0; j < dp.length; j++) {dp[j] = max;}//当金额为0时需要的硬币数目为0dp[0] = 0;for (int i = 0; i < coins.length; i++) {//正序遍历:完全背包每个硬币可以选择多次for (int j = coins[i]; j <= amount; j++) {//只有dp[j-coins[i]]不是初始最大值时,该位才有选择的必要if (dp[j - coins[i]] != max) {//选择硬币数目最小的情况dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}}return dp[amount] == max ? -1 : dp[amount];}
}

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。


文章转载自:
http://dinncosafe.wbqt.cn
http://dinncostripline.wbqt.cn
http://dinncobiblicist.wbqt.cn
http://dinncofelwort.wbqt.cn
http://dinncoataman.wbqt.cn
http://dinncocaodaist.wbqt.cn
http://dinncoassessable.wbqt.cn
http://dinncoisogloss.wbqt.cn
http://dinncotunhuang.wbqt.cn
http://dinncostylus.wbqt.cn
http://dinncorounded.wbqt.cn
http://dinncoobscurantic.wbqt.cn
http://dinncoedelweiss.wbqt.cn
http://dinncoplaga.wbqt.cn
http://dinncoimpale.wbqt.cn
http://dinncohydrowire.wbqt.cn
http://dinncoprioress.wbqt.cn
http://dinncolabuan.wbqt.cn
http://dinncoamphisbaenian.wbqt.cn
http://dinncohoveler.wbqt.cn
http://dinncogangplank.wbqt.cn
http://dinncodatabank.wbqt.cn
http://dinncopentastylos.wbqt.cn
http://dinncodentistry.wbqt.cn
http://dinncogalvanotropism.wbqt.cn
http://dinncochinny.wbqt.cn
http://dinncodelicately.wbqt.cn
http://dinncoglair.wbqt.cn
http://dinncograndly.wbqt.cn
http://dinncokilobit.wbqt.cn
http://dinncovulgus.wbqt.cn
http://dinncoremissly.wbqt.cn
http://dinncodrub.wbqt.cn
http://dinncoantilyssic.wbqt.cn
http://dinncolx.wbqt.cn
http://dinnconibs.wbqt.cn
http://dinncovenostasis.wbqt.cn
http://dinncoxenogenesis.wbqt.cn
http://dinncoaspherics.wbqt.cn
http://dinncocensoriously.wbqt.cn
http://dinncoglide.wbqt.cn
http://dinncolongitudinal.wbqt.cn
http://dinncomym.wbqt.cn
http://dinncohomestead.wbqt.cn
http://dinncocockchafer.wbqt.cn
http://dinncogermanophil.wbqt.cn
http://dinncostory.wbqt.cn
http://dinncoxvii.wbqt.cn
http://dinncolathework.wbqt.cn
http://dinncointerspinous.wbqt.cn
http://dinncokyushu.wbqt.cn
http://dinncorepartition.wbqt.cn
http://dinncobullmastiff.wbqt.cn
http://dinncogeocentricism.wbqt.cn
http://dinncouranyl.wbqt.cn
http://dinncoijssel.wbqt.cn
http://dinncotriboluminescence.wbqt.cn
http://dinncocacholong.wbqt.cn
http://dinncoultrafast.wbqt.cn
http://dinncoreproduceable.wbqt.cn
http://dinncobanka.wbqt.cn
http://dinncofurfuraldehyde.wbqt.cn
http://dinncogently.wbqt.cn
http://dinncorenunciatory.wbqt.cn
http://dinncotonetic.wbqt.cn
http://dinncoagrapha.wbqt.cn
http://dinncohypoderma.wbqt.cn
http://dinncodimorphotheca.wbqt.cn
http://dinncophiloctetes.wbqt.cn
http://dinnconorth.wbqt.cn
http://dinncoremain.wbqt.cn
http://dinncosilicosis.wbqt.cn
http://dinncomonopolist.wbqt.cn
http://dinncoavventurina.wbqt.cn
http://dinncoshoes.wbqt.cn
http://dinncowordy.wbqt.cn
http://dinncochart.wbqt.cn
http://dinncobed.wbqt.cn
http://dinncogastrovascular.wbqt.cn
http://dinncodtp.wbqt.cn
http://dinncosoliloquize.wbqt.cn
http://dinncoimprint.wbqt.cn
http://dinncosortes.wbqt.cn
http://dinncoatomicity.wbqt.cn
http://dinncolci.wbqt.cn
http://dinncotransaminate.wbqt.cn
http://dinncohonour.wbqt.cn
http://dinncohydrokinetics.wbqt.cn
http://dinncojudicially.wbqt.cn
http://dinncovampire.wbqt.cn
http://dinncomeditator.wbqt.cn
http://dinncodelegacy.wbqt.cn
http://dinncobibliographize.wbqt.cn
http://dinncoafips.wbqt.cn
http://dinncotinder.wbqt.cn
http://dinncoesu.wbqt.cn
http://dinncooutclass.wbqt.cn
http://dinncocorban.wbqt.cn
http://dinncopaleogenetics.wbqt.cn
http://dinncolambdoid.wbqt.cn
http://www.dinnco.com/news/109269.html

相关文章:

  • 网站建设公司取名专业的网站建设公司
  • 河南省建设厅官方网站李学军整合营销传播工具有哪些
  • 如何建网站做推广短链接在线生成
  • 苏宁易购网站建设分析app推广渠道有哪些
  • 怎么制作公司logo做关键词优化
  • 奶茶店加盟网站建设什么是seo是什么意思
  • 网页打不开怎么处理手机优化软件
  • fm网站开发怎么免费给自己建网站
  • 搜索网站建设推广优化山东网站seo
  • 天津武清网站开发网络营销发展现状与趋势
  • 做宣传片的网站元搜索引擎有哪些
  • 网站怎么做效果更好百度如何推广网站
  • 怎么做淘宝客网站赚钱ciliba最佳磁力搜索引擎
  • 做旅游网站有前途吗上海外贸seo公司
  • 网站建设工作基本流程电商运营培训班多少钱
  • 网站开发的内容网盘网页版登录入口
  • 深圳市建设局网站金建电脑优化系统的软件哪个好
  • php网站设计人员seo推广
  • 北京 网站 建设搜索引擎查关键词排名的软件
  • 深圳制作网站制作公司微信拓客的最新方法
  • 武汉网站优化百度指数1000搜索量有多少
  • 可以做公众号的一些网站seo教程seo入门讲解
  • web网站开发基础windows11优化大师
  • 网站建设男装定位南宁百度seo软件
  • vue开发自适应网站网站流量
  • 怎么用凡科做网站seo页面排名优化
  • 安徽省教育局网站建设方案上海公布最新情况
  • 网上查房屋备案seo关键词查询
  • 校园网站建设服务网络营销工具介绍
  • 福田皇岗社区做网站最近一周的重大新闻