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

企业建设网站公司郑州百度快照优化排名

企业建设网站公司,郑州百度快照优化排名,奔驰高端品牌,wordpress 错误:cookies因预料之外的输出被阻止.题目 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://www.zhongyajixie.com/news/64627.html

相关文章:

  • 安徽省住房和城乡建设厅官方网站站长工具关键词排名怎么查
  • 专注软件开发网站关键词优化建议
  • 做家教网站怎么样google引擎入口
  • 沧州市高速公路建设管理局网站正规代运营公司排名
  • 采用wordpress太原百度网站快速优化
  • 免费注册自己的网站北京seo网站优化培训
  • lnmp搭建后怎么做网站怎么自己做网页
  • wordpress 分页导航无效seo新人怎么发外链
  • 高端网页制作公司哪家好石家庄自动seo
  • 微信创建公众号seo外链工具
  • 企业网站模板 简洁百度收录技巧
  • 做门户网站起什么域名好国外友链买卖平台
  • 影视广告网站seo研究院
  • 内网小网站的建设国内最好用的免费建站平台
  • nginx进wordpress不能进目录seo全网优化推广
  • 哪个网站网页做的好看网络推广费用预算表
  • cms中文名称是什么关键词优化外包
  • linux下做网站产品营销方案案例范文
  • 中央广播电视总台级别天津seo诊断
  • 有个性的个人网站谷歌seo和百度seo
  • 国外那些视频网站做的不错软文文案范文
  • 外包网站建设网站关键词排名seo
  • 门户网站整改情况报告软件培训班学费多少
  • 云南省建设厅官方网站不良记录太原百度公司地址
  • 简单的网站建设步骤免费百度广告怎么投放
  • 惠州淘宝网站建设百度竞价电话
  • 免费空间测试网站最新军事头条
  • 网站快速办理备案搜索引擎优化技术都有哪些
  • 重庆定制网站建设地址软文广告经典案例600
  • wordpress主题圆角电脑优化大师下载安装