Java 中使给定值达到最小硬币数17 Mar 2025 | 6 分钟阅读 在本节中,我们将学习如何使用最少数量的硬币来兑换给定的金额。使用最少硬币兑换给定金额的问题是 硬币找零问题 的一个变体。 在这个问题中,给定了金额 Y。任务是找到兑换给定金额 Y 所需的最少硬币数量。硬币只能从给定的数组 C[] = {C1, C2, C3, C4, C5, …} 中选取。如果任何数量的硬币不适合兑换给定的金额,则显示相应的消息。 示例 1输入: C[] = {5, 10, 25}, Y = 30 输出: 兑换金额 30 最少需要 2 枚硬币。 解释: 兑换金额 30 可能有多种硬币组合。 5 + 5 + 5 + 5 + 5 + 5 = 30 (硬币总数: 6) 5 + 5 + 5 + 5 + 10 = 30 (硬币总数: 5) 5 + 5 + 10 + 10 = 30 (硬币总数: 4) 10 + 10 + 10 = 30 (硬币总数: 3) 5 + 25 = 30 (硬币总数: 2) 因此,我们看到兑换金额 30 最少需要 2 枚硬币。所以,我们的答案是 2。 示例 2输入 C[] = {4, 3, 2, 6}, Y = 15 输出: 兑换金额 15 最少需要 3 枚硬币。 解释: 兑换金额 12 可能有多种硬币组合。 2 + 2 + 2 + 2 + 2 + 2 + 3 = 15 (硬币总数: 7) 2 + 2 + 2 + 3 + 3 + 3 = 15 (硬币总数: 6) 2 + 2 + 2 + 2 + 3 + 4 = 15 (硬币总数: 6) 2 + 2 + 2 + 3 + 6 = 15 (硬币总数: 5) 3 + 3 + 3 + 3 + 3 = 15 (硬币总数: 5) 2 + 2 + 3 + 4 + 4 = 15 (硬币总数: 5) 3 + 3 + 3 + 6 = 15 (硬币总数: 4) 4 + 4 + 4 + 3 = 15 (硬币总数: 4) 2 + 3 + 4 + 6 = 15 (硬币总数: 4) 4 + 4 + 4 + 3 = 15 (硬币总数: 4) 6 + 6 + 3 = 15 (硬币总数: 3) 因此,我们看到兑换金额 15 最少需要 3 枚硬币。所以,我们的答案是 3。 问题解决方案这个问题有多种解决方法。但在本节中,我们将通过以下两种方法来解决问题:
让我们逐一来看这些方法。 使用递归使用以下递归公式可以解决给定的问题。 观察以下实现。 文件名: MinCoins.java 输出 For the sum 30 The minimum number of required coins is: 2 Using the following coins: 5 10 25 For the sum 15 The minimum number of required coins is: 3 Using the following coins: 4 3 2 6 时间复杂度: 上述程序的运行时间复杂度是指数级的。 由于指数级的时间复杂度始终很高,因此需要降低时间复杂度。因此,我们需要一种优化的方法。以下实现展示了这一点。 使用动态规划如果我们观察上述方法,有很多子问题被计算了不止一次。因此,优化是直接的。我们需要消除冗余子问题的额外计算时间。我们将在下面的程序中进行相同的操作。 文件名: MinCoins1.java 输出 For the sum 30 The minimum number of required coins is: 2 Using the following coins: 5 10 25 For the sum 15 The minimum number of required coins is: 3 Using the following coins: 4 3 2 6 时间复杂度: 上述程序的运行时间复杂度主要取决于方法 minNoCoins() 中存在的嵌套 for 循环。由于内层 for 循环从 0 运行到 s,外层循环从 1 运行到 Y,因此时间复杂度为 O(sY),其中 Y 是给定的金额,s 是硬币数组的大小。 下一主题Eclipse 快捷键 Java |
这是谷歌、亚马逊、TCS、Accenture、Uber 等顶级 IT 公司面试中经常问到的一个非常有趣的问题。通过解决这个问题,可以检查面试者的逻辑能力、批判性思维和解决问题的能力。所以,在本节中,我们将...
阅读 3 分钟
在本节中,我们将学习如何创建一个 Java 程序来查找三个数字中的最大值。此外,我们还将学习如何使用三元运算符在 Java 中查找三个数字中的最大值。使用三元运算符 在继续学习程序之前,让我们……
阅读 3 分钟
在 Java 中,Set 是 java.util 包中定义的接口。Set 是一个不能包含重复元素的集合。在许多集合应用程序中,可能需要有条件地或无条件地删除元素。为了对...执行删除操作
阅读 4 分钟
死代码是开发人员在编程过程中经常遇到的一个常见问题。它指的是编写但从未在程序运行时执行的代码行或代码块。虽然这似乎无害,但死代码会使代码库混乱,使其更难...
阅读 3 分钟
JVM 和 JIT 编译器都在 Java 程序的执行中扮演着独特的角色。虽然 JVM 为 Java 字节码执行提供了运行时环境,但 JIT 编译器可以提高程序执行性能。通过将频繁使用的字节码转换为本地机器代码。Java 虚拟机 (JVM) JVM 是...
5 分钟阅读
Java 字节码是 JVM 理解的 Java 代码指令集。Java 程序编译后,会为其代码生成字节码。简单来说,Java 字节码就是 .class 文件形式的机器码。用...
5 分钟阅读
在 Java 中,接口和类都可以拥有变量,但它们的行为非常不同。理解这些差异对于编写正确且高效的代码至关重要。接口变量 Java 中的接口定义了一个契约,它指定了一个类必须做什么,但没有指定如何做。接口内的变量...
5 分钟阅读
Java 中的静态变量 在 Java 中,变量是保存值的带标签的容器。变量由内存中占用保留区域的名称表示。换句话说,它是内存位置的名称。我们可以声明并赋值...
5 分钟阅读
Socket 是 Java 网络支持的核心概念。Socket 范式是在 20 世纪 80 年代初的 4.2BSD Berkeley UNIX 版本中引入的。因此,它被称为 Berkeley socket。Socket 是现代网络的基础,因为 Socket……
阅读 17 分钟
JDK 8 引入了 IntPredicate 接口。java.util.function 包包含此接口。它使用整数值,并根据条件返回一个谓词值。由于它是一个函数式接口,因此也可以在 lambda 表达式中使用。方法包括:1. test():...
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India