【问题标题】:Why -Infinity is like a base for comparing numbers to return max?为什么 -Infinity 就像比较数字以返回最大值的基础?
【发布时间】:2019-04-18 14:39:46
【问题描述】:

在这段代码中,我似乎无法理解为什么 -Infinity 表现得像一个基数,因此与之相比,它会从一个数字数组中返回最大的数字。

function max(...numbers) {
   let result = -Infinity;
   for (let number of numbers) {
     if (number > result) result = number;
   }
   return result;
}

【问题讨论】:

  • -Infinity以外的所有数字都是> -Infinity
  • 它对任何数字(如 4,5,3,2,3,23,3332)返回 true,那么如何只对最大的数字为 true,并且当它的我在这个特定数组中给你的所有数字都是真的吗?
  • -Infinity 用于启动进程。一旦发现数组中的另一个数字大于起始值 (-Infinity),则 result 将具有不同的值。因此,在循环结束时,result 将是数组中找到的最大值。只有整个数组由-Infinity 值组成,才能成为最终返回的结果。
  • 我没有注意到结果将被重新分配下一个值,因此比较将与数组的数字循环。谢谢

标签: javascript loops infinity


【解决方案1】:

一开始会让人感到困惑,可能在您的脑海中,解决方案听起来像这样:

 let result = 0;

问题是,当我们想要找到一个数组的最大值时,我们需要将每个元素相互比较。我们将 MAXIMUM 设置为 -INFINITY 更像是一种“习惯”。这仅仅意味着到目前为止最大的元素是我们可以表达的最低可能的数字。是否有意义?我们简单地假设我们将找到的最大数字是 -Infinity。然后我们将数组中的元素与这个基数(在我们的例子中是-Infinity)进行比较,如果我们是假的(可能我们是假的),那么我们将 -Infinity 替换为下一个大于我们当前值的数字。我们对整个数字范围都这样做,这就是我们找到最大元素的方式。

您可以选择多个元素作为起点,但切勿选择自己输入的数字(只有在练习要求时才应该这样做)。 例如,如果您选择:

let result = 0;

那么你可能有问题。也许数字都是负数,例如 [-3,-13,-5,13,​​-99] 但您已经将最大数字设置为 0,因此每次比较都是错误且无用的。

因此,请记住,在这种情况下,将基值设置为 -Infinity 是一种很好的做法,或者如果您想采用其他方法,则将基值设置为数组中的第一个元素。

【讨论】:

  • 起始值也可以是null,这会使比较稍微复杂一些,但可能更容易理解。
猜你喜欢
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
相关资源
最近更新 更多