我正在处理 algoexpert.io 编码挑战,但我无法理解标题为 的问题之一的建议解决方案。不可构造的变化
这是挑战问题:
给定一个代表硬币值(value)的正整数数组
占有,写一个函数返回最小的变化量(
您无法创建的最低金额)。给定的硬币可以有
任何正整数值并且不一定是唯一的(即,您可以拥有
多个相同值(value)的硬币)。
例如,如果给定硬币 = [1, 2, 5],则最小值
你不能创造的改变量是 4。如果你没有
硬币,你不能创造的最小零钱是 1。
// O(nlogn) time, O(n) size.
function nonConstructibleChange(coins) {
coins = coins.sort((a, b) => a - b); // O(nlogn) time operation
let change = 0;
for (coin of coins) {
if (coin > change + 1) return change + 1;
change += coin;
}
return change + 1;
}
我的问题我不完全确定解决方案的作者是如何得出这样的直觉的
if the current coin is greater than `change + 1`, the smallest impossible change is equal to `change + 1`.
我可以看到它是如何跟踪的,并且确实该算法通过了所有测试,但我想了解更多关于我可以用来设计这个规则的过程。感谢您花时间阅读问题!
最佳答案
这个也花了我一段时间,但这就是我理解它的方式:
假设你已经证明你可以赚 1-8 美分。
你进入下一个迭代,想知道你是否能赚到 9 美分。所以你迭代到排序列表中的下一个新硬币。
如果新币 < 9:
如果新币 == 9:
如果新币 > 9:
这就是 change + 1 的来源。 (您的变量更改 = 8)
if the current coin is greater than `change + 1`, the smallest impossible change is equal to `change + 1`.
关于javascript - 如何为 Algoexpert.io 的 Non-Constructible Change 挑战设计这种解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67099988/