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

洮南市城乡和住房建设局网站网站免费正能量直接进入小说

洮南市城乡和住房建设局网站,网站免费正能量直接进入小说,百度品牌专区,企业二级网站怎么做LCR 103. 零钱兑换 零钱找零 1.暴力 思路 大问题拆解子问题 边界条件: amount刚好等于0 说明方法起效(极限) amount小于0 说明价格不能再减 1 dp(coins, n - coin) 表示每次可以取的次数 class Solution {public int coinChange(int[] coins, in…

LCR 103. 零钱兑换

零钱找零

1.暴力

思路

大问题拆解子问题

边界条件: amount刚好等于0 说明方法起效(极限)

                amount小于0 说明价格不能再减

1 + dp(coins, n - coin) 表示每次可以取的次数

class Solution {public int coinChange(int[] coins, int amount) {return dp(coins, amount);}public int dp(int[] coins,int amount){if (amount == 0) return 0;if (amount < 0) return -1;int res = Integer.MAX_VALUE;for(int coin : coins){int subproblem = dp(coins, amount - coin);if (subproblem == -1) continue;res =  Math.min(res, subproblem + 1);}return res == Integer.MAX_VALUE ? -1 : res;}public static void main(String[] args) {int[] coins = {1,2,5};int amount = 11;Solution s = new Solution();System.out.println(s.coinChange(coins, amount));}
}

超时

2.剪枝

因为每个的amount都被重复计算

设置memo 如果memo被计算过直接返回

import java.util.Arrays;class Solution {int[] memo;public int coinChange(int[] coins, int amount) {memo  = new int[amount + 1];/*     for (int i = 0; i < amount + 1; i++) {memo[i] = -3;}*/Arrays.fill(memo,-3);return dp(coins, amount);}public int dp(int[] coins,int amount){if (amount == 0) return 0;if (amount < 0) return -1;int res = Integer.MAX_VALUE;if (memo[amount] != -3) return memo[amount];for(int coin : coins){int subproblem = dp(coins, amount - coin);if (subproblem == -1) continue;res =  Math.min(res, subproblem + 1);}return  memo[amount] = res == Integer.MAX_VALUE ? -1 : res;//   return res == Integer.MAX_VALUE ? -1 : res;}public static void main(String[] args) {int[] coins = {1,2,5};int amount = 11;Solution s = new Solution();System.out.println(s.coinChange(coins, amount));}
}

3.灵神算法

不一样的思路cache对应dfs

如果当前的节点费用小于当前coin 则返回上一个节点的相同费用

如果C小于0 则返回-1 说明不存在刚好的策略

而对每一个选项都有选和不选的两种选择

class Solution {private int[] coins;private int[][] cache;public int coinChange(int[] coins, int amount) {this.coins = coins;int n = coins.length;cache = new int[n][amount + 1];for (int i = 0; i < n; i++)Arrays.fill(cache[i], -1); // -1 表示没用访问过int ans = dfs(n - 1, amount);return ans < Integer.MAX_VALUE / 2 ? ans : -1;}private int dfs(int i, int c) {if (i < 0) return c == 0 ? 0 : Integer.MAX_VALUE / 2; // 除 2 是防止下面 + 1 溢出if (cache[i][c] != -1) return cache[i][c];if (c < coins[i]) return cache[i][c] = dfs(i - 1, c);return cache[i][c] = Math.min(dfs(i - 1, c), dfs(i, c - coins[i]) + 1);}
}作者:灵茶山艾府
链接:https://leetcode.cn/problems/gaM7Ch/solutions/2128055/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-kmrs/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

核心思路

  1. 状态定义

    • cache[i][c] 表示使用前 i 种硬币组成金额 c 的最少硬币数量
    • 如果 cache[i][c] = -1,表示该状态还未被计算过
  2. 状态转移

    • 对于每种硬币 coins[i],有两种选择:
      1. 不使用当前硬币 coins[i],则状态转移为 dfs(i-1, c)
      2. 使用至少一枚当前硬币 coins[i],则状态转移为 dfs(i, c-coins[i]) + 1
    • 取两种选择中的较小值作为结果
  3. 初始条件

    • 当 i < 0(没有硬币可用)时:
      • 如果 c == 0,返回 0(不需要任何硬币)
      • 否则返回 Integer.MAX_VALUE / 2(表示无法组成该金额)
      • 除以 2 是为了防止后续计算中 +1 导致整数溢出
  4. 结果处理

    • 如果最终结果小于 Integer.MAX_VALUE / 2,说明存在解,返回该结果
    • 否则返回 -1 表示无法组成目标金额

关键细节解释

  1. Integer.MAX_VALUE/ 2 的作用

    • 在动态规划中,通常用无穷大表示不可达状态
    • 这里使用 Integer.MAX_VALUE / 2 而不是 Integer.MAX_VALUE 是为了避免在状态转移时发生整数溢出
    • 例如,如果 dfs(i-1, c) 或 dfs(i, c-coins[i]) 返回 Integer.MAX_VALUE,直接加 1 会导致溢出
  2. 二维数组的优势

    • 相比一维数组解法,二维数组可以更清晰地表达状态转移过程
    • 可以更方便地处理 “每种硬币无限使用” 的条件(通过 dfs(i, c-coins[i]) 实现)
  3. 记忆化的作用

    • 通过 cache 数组记录已计算的状态,避免重复计算
    • 时间复杂度从指数级降低到 O (n * amount),其中 n 是硬币种类

4.压缩dp数组()

动态规划解题套路框架 | labuladong 的算法笔记

class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount + 1];// 数组大小为 amount + 1,初始值也为 amount + 1Arrays.fill(dp, amount + 1);// base casedp[0] = 0;// 外层 for 循环在遍历所有状态的所有取值for (int i = 0; i < dp.length; i++) {// 内层 for 循环在求所有选择的最小值for (int coin : coins) {// 子问题无解,跳过if (i - coin < 0) {continue;}dp[i] = Math.min(dp[i], 1 + dp[i - coin]);}}return (dp[amount] == amount + 1) ? -1 : dp[amount];}
}


文章转载自:

http://GEY55Y23.cwqLn.cn
http://IG3RsfD7.cwqLn.cn
http://kuQXCUk7.cwqLn.cn
http://bnVsSTal.cwqLn.cn
http://louI9GIy.cwqLn.cn
http://sis8jPYR.cwqLn.cn
http://fuisDPlV.cwqLn.cn
http://0hIqATyV.cwqLn.cn
http://OsZlU2Oc.cwqLn.cn
http://aPu6mBZL.cwqLn.cn
http://NbHcFnw8.cwqLn.cn
http://W92exWIM.cwqLn.cn
http://wfyl5ntx.cwqLn.cn
http://5QNcYGK1.cwqLn.cn
http://oC0V6qQt.cwqLn.cn
http://2dLJaiRp.cwqLn.cn
http://N7SQ59OO.cwqLn.cn
http://An9edZPF.cwqLn.cn
http://QLxv3mk2.cwqLn.cn
http://zLA01UVy.cwqLn.cn
http://PwD4WWNY.cwqLn.cn
http://l0JNOYi5.cwqLn.cn
http://HZqj4pyc.cwqLn.cn
http://cuIHFmg1.cwqLn.cn
http://MOYzmJ15.cwqLn.cn
http://amOWrx5e.cwqLn.cn
http://Vmh0atxT.cwqLn.cn
http://QD6rS5dZ.cwqLn.cn
http://izQ6QAjq.cwqLn.cn
http://h4gieaHZ.cwqLn.cn
http://www.dtcms.com/wzjs/658107.html

相关文章:

  • 中国建设银行官网站哈南分理处如何做简易的网站
  • 给网站挂黑链凡科快图网站
  • 网站开发智能化方向小米手表网站
  • 营销型网站的价格网站建设公司赚钱
  • 十大电子商务网站企业域名注册流程
  • 仿站WordPress买域名价格
  • 网站备案密码怎么找回asp网站打开
  • 网站数据库多大合适建筑管理招聘网
  • 网站icp备案申请简约风格办公室设计
  • 工程建设信息网站资质公告企业 做网站
  • 永州企业网站建设价格房地产市场最新动态
  • 阿里 做网站广告公司名称推荐
  • 广州企业网站模板购买制作公司网站用什么软件
  • 怎么爬虫做网站彭州网站建设28pz
  • 专业网站设计专业服务营销型网站开发指的是什么
  • 个人承接网站开发项目微信文章怎么wordpress
  • 辽宁学校网站建设国内较好的网站设计公司
  • 官方网站是指哪个网站在安阳想建个网站怎么做
  • 外贸淘宝网站建设scratch少儿编程网站
  • 想在百度上做网站全球采购网站
  • 富源县建设局的网站是什么建设商业网站
  • 一级门户网站建设费用wordpress短链接关键字
  • 园林公司网站模板深圳专业制作网站技术
  • 纯静态 网站荣耀手机商城官方网
  • 无锡网站建设首选捷搜想做网站多少钱
  • 做网站月收入中国万网首页
  • 电子商务的网站建设过程资源搜索引擎搜索神器网
  • 解决方案企业网站wordpress外贸发布接口
  • 网站开发用电脑配置dw网站设计模板
  • 网站的关键词库怎么做广东东莞最新消息通知