- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
预期
为了比较目的,使用Integer.MAX_VALUE
可以一致地返回大量数字。
观测到的Integer.MAX_VALUE
返回负数。
实行
在示例代码中,将值保存到2D表中,以便找到组成给定数量所需的最小硬币数量。
使用Integer.MAX_VALUE
-2147483647
是从Integer.MAX_VALUE
派生的。
fun main() {
// Steps - Iterative/bottom-up
// 1. Create a 2D table: Rows = Denominations(Denoms), Columns = Amount(Amt)
// 2. Store min # of coins in at [R][C] = Min(currentDenomMin, previousDenomMin)
// a. currentDenomMin = [R][C - coins.get(R)] + 1
// b. previousDenomMin = [R - 1][C]
// 3. Return minCount or -1 for table[coins.size - 1, Amt].
println("Min count: ${coinChange(intArrayOf(2), 3)}")
}
lateinit var table: Array<IntArray>
lateinit var mCoins: IntArray
private val maxValue = Integer.MAX_VALUE
fun coinChange(coins: IntArray, amt: Int): Int {
table = Array(coins.size, { IntArray(amt + 1) })
mCoins = coins
coins.sort()
buildMinCounts(amt)
val minCount = table[coins.size - 1][amt]
return if (minCount == maxValue) -1 else minCount
}
fun buildMinCounts(amt: Int) {
for (r in 0..mCoins.size - 1) {
for (c in 0..amt) {
val currentDenomValue = mCoins.get(r)
val currentDenomMin = getDenomMin(r, c - currentDenomValue) + 1
val previousDenomMin = getDenomMin(r - 1, c)
if (c == 0) {
table[r][c] = 0
} else table[r][c] = Math.min(currentDenomMin, previousDenomMin)
}
}
}
fun getDenomMin(r: Int, c: Int): Int {
if (r < 0 || c < 0) return maxValue
else return table[r][c]
}
fun printT(amt: Int) {
for (r in 0..mCoins.size - 1) {
for (c in 0..amt) {
print("${table[r][c]} ")
}
println("")
}
}
改用
999999999
作为
maxValue
可以正常工作。
fun main() {
println("Min count: ${coinChange(intArrayOf(2), 3)}")
}
lateinit var table: Array<IntArray>
lateinit var mCoins: IntArray
private val maxValue = 999999999
fun coinChange(coins: IntArray, amt: Int): Int {
table = Array(coins.size, { IntArray(amt + 1) })
mCoins = coins
coins.sort()
buildMinCounts(amt)
val minCount = table[coins.size - 1][amt]
return if (minCount == maxValue) -1 else minCount
}
fun buildMinCounts(amt: Int) {
for (r in 0..mCoins.size - 1) {
for (c in 0..amt) {
val currentDenomValue = mCoins.get(r)
val currentDenomMin = getDenomMin(r, c - currentDenomValue) + 1
val previousDenomMin = getDenomMin(r - 1, c)
if (c == 0) {
table[r][c] = 0
} else table[r][c] = Math.min(currentDenomMin, previousDenomMin)
}
}
}
fun getDenomMin(r: Int, c: Int): Int {
if (r < 0 || c < 0) return maxValue
else return table[r][c]
}
fun printT(amt: Int) {
for (r in 0..mCoins.size - 1) {
for (c in 0..amt) {
print("${table[r][c]} ")
}
println("")
}
}
最佳答案
这是因为溢出。 getDenomMin(r, c - currentDenomValue) + 1
返回会导致溢出的Integer.MAX_VALUE + 1
。有两种方法可以避免这种情况:
maxValue
更改为不会溢出并且实际上是最大的值。例如,您有一个大小为10 ^ 5的数组,其中包含1到10 ^ 9之间的整数。现在最大可能的和为10 ^ 5 * 10 ^ 9,即10 ^ 14,因此我们可以将maxValue
设置为大于或等于10 ^ 14的任何值。在您的情况下,您可以将其设置为10 ^ 5之类的值,因为您不需要计数就可以达到最大可用硬币数之和。val currentDenomMin = getDenomMin(r, c - currentDenomValue) + 1
在添加1之前,可以将其键入Long,以免溢出。val currentDenomMin = getDenomMin(r, c - currentDenomValue).toLong + 1
关于kotlin - Kotlin Integer.MAX_VALUE返回负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62524736/
如何实现能够将 +-Double.MAX_VALUE 作为参数处理的函数 getRandomDouble(min,max)? 在线研究: 这个问题的大多数答案是: public Double getR
我注意到了一件有趣的事情。 Java 的 Integer.MAX_VALUE 是 0x7fffffff (2147483647) Kotlin 的 Int.MAX_VALUE 是 2147483647
我只是想将 1 到 Integer.MAX_VALUE 之间的数字相加,但在输出中我什么也没得到。该计划介于两者之间。下面是我创建的类。 public class Test { public
我查看了 Double.isFinite() 的实现从 java 8 开始就存在(因为我需要 java 7 中的功能): public static boolean isFinite(double d
我想按如下方式比较两个 double 值: Double doubleValue = Double.valueOf(Long.MAX_VALUE); Double doubleValue2 = Dou
在JavaScript , Number.MAX_VALUE表示最大可表示数值(大约为 1.79E+308 ,一个相当大的数字) 但是,如果我评估 (Number.MAX_VALUE - 1) < N
我的表单中有一个 DecimalField,我想限制 min_value=0.1 和 max_value=99.99 purity_percent = forms.DecimalField(max_v
我读过有关 MAX_VALUE 的内容,发现常量可以容纳的最大值为 2^31-1。任何程序哪里需要使用 MAX_VALUE? 我也对这段堆栈代码感到困惑,如果堆栈为空,则返回 Integer.Max_
// The given input String input = "99999999.99"; // We need only 2 decimals (in case of more than 2
在 JavaScript 中,日期中年份的最大值是多少? 如何在代码中找到它? 我尝试了以下方法: new Date().getFullYear().MAX_VALUE; 提前致谢。 最佳答案 根据此
我试着理解下面的代码: int i = Integer.MAX_VALUE; double d = Double.MAX_VALUE; System.out.println(i + ":" + (i+
在我的任务中,我必须为一家燃气公司创建一个燃气表系统,以允许员工创建新的客户帐户并修改名称和单位成本等数据,以及从他们的帐户中提取(存入)资金。 我已经创建了我的构造函数,甚至添加了一个重载方法,尽管
有没有办法将vec填充到具有u64::max_value极限值的范围内? fn main() { let vals: Vec = (2..u64::max_value()).collect()
我想检查 double 是否有 Double.MAX_VALUE。 这是正确的方法吗(版本 1): boolean hasMaxVal(double val){ return val == D
我很惊讶为什么在我的机器上,数组的最大大小是 Integer.MAX_VALUE/7 我知道数组是按整数索引的,因此数组大小不能大于 Integer.MAX_VALUE。我还读了一些stackover
我想检查 double 是否有 Double.MAX_VALUE。 这是正确的方法吗(版本 1): boolean hasMaxVal(double val){ return val == D
我偶然发现了如此奇怪的代码,但我不知道为什么? public class CrazyTest { public static void main(String[] args) {
有人可以解释为什么这段代码在 Java 7,8 上是无限循环吗?当 i = Integer.MAX_VALUE + 1 时循环应该停止,但它似乎拒绝了限制。为什么会这样? public static
我有以下代码: if (maxLength>=0 && (++totalLength > maxLength)) throw new IllegalStateException("Form t
这个问题的答案可能非常明显,但我无法在 Mozilla 文档中或通过粗略搜索在 Google 上找到它。 如果你有这样的代码 Number.MAX_VALUE + 1; // Infinity, ri
我是一名优秀的程序员,十分优秀!