Javascript 如何确定动态间隔的极值(最小值和最大值)

Javascript 如何确定动态间隔的极值(最小值和最大值),javascript,arrays,math,Javascript,Arrays,Math,我有一个长度为200的数组。 每秒钟我都会在数组的位置[0]上添加一个新的数字,将其他值向上推到数组的一个位置 我需要的是在每次输入一个新数字时确定整个数组的最大值和最小值。我需要分析所有的200个值,然后再向数组中提供一个新值 我已经设法做到了,但是我在丢弃“old”max和“old”min时遇到了一些问题,因为一旦它们被推出阵列,我就不再需要它们了 我找到了一种方法,使用第一个差分并将实际值推入另一个数组。问题是,当我有一个最小值或最大值出现多次时。这个新数组将不按特定顺序重复它们,我只需要

我有一个长度为200的数组。 每秒钟我都会在数组的位置[0]上添加一个新的数字,将其他值向上推到数组的一个位置

我需要的是在每次输入一个新数字时确定整个数组的最大值和最小值。我需要分析所有的200个值,然后再向数组中提供一个新值

我已经设法做到了,但是我在丢弃“old”max和“old”min时遇到了一些问题,因为一旦它们被推出阵列,我就不再需要它们了


我找到了一种方法,使用第一个差分并将实际值推入另一个数组。问题是,当我有一个最小值或最大值出现多次时。这个新数组将不按特定顺序重复它们,我只需要一个最大值和一个最小值。

如果您有一个n个值的数组,该数组通过删除第一个元素并在末尾推一个新的元素来按间隔更新,那么您可以分两步拆分算法,该算法将查找间隔的最小值/最大值

你的前提条件允许你做出一个强有力的假设,即

min(data) = min(data[0], data[1..n-1])
从这个假设开始,您不需要在每个步骤计算所有值的最小/最大值

让我们举一个例子,假设像你说的那样,有200个值,并且有一个通用的
min
函数能够计算一个数组、一对值或一个值和一个数组的最小值。这是元代码,忽略语法

首先,预计算最小支持数据和附加支持数据:

int middleMin = min(array[1..n-1]); // so we skip first
int firstValue = array[0];
int realMin = min(firstValue, middleMin);
现在,当您在末尾插入新元素并删除时,可能会发生以下两种情况:

  • firstValue==realMin(&&firstValue
    ,在这种情况下,您必须在新的
    数组[0..n-1]
    上找到下一个更高的值,因为您删除了最小值
  • middleMin==realMin
    在这种情况下,您知道删除的元素不是第一个元素,因此不需要重新计算全局最小值,只需根据新插入的元素更新它,例如
    middleMin=realMin=min(realMin,数组[n-1])
  • 实际上,
    firstValue==middleMin
    也可能发生这种情况,但这又回到了第二种情况,因为trail数组中还有一个值是当前的最小值

您能提供一个实际的例子吗?我不明白你有什么问题。听起来您也在从数组中删除元素,对吗?内置的
max
min
函数有什么问题?它们采用数组:
Math.max.apply(null,array)
@Jaxo它们是
O(N)
,这就是“错”所在。不过,一个200个数字的数组不会成为任何类型的瓶颈。@Jaxo是的,但从算法的角度来看,这是一项很好的任务:-)有时开发人员需要一个挑战,而不仅仅是使用
Math.max()
:-)