用于确定数组元素是否正在进行的JavaScript的最佳方法?

时间:2015-12-07 03:14:44

标签: javascript algorithm

我的意思是对于给定的数组A,我们有

A[1] - A[0] = A[2] - A[1] = A[3] - A[2] = ... = A[A.length-1] - A[A.length-2]

我提出的基本功能是

function IsProgression ( arr ) 
{
    if ( arr.length < 2 ) return true; // define that there is a progression if the array is empty or has one element
    var diff = arr[1] - arr[0]; 
    for ( var k = 2; k < arr.length; ++k ) 
    {
         if ( (arr[k] - arr[k-1]) != diff ) return false;
    }
    return true;
}

但是我想知道标准的JavaScript库是否有更紧凑和/或更有效的方式来实现这一点,或者是否有一般的方式。

2 个答案:

答案 0 :(得分:2)

不,标准JS库没有与进度相关的任何内容,您的方法绝对正确。

要检查您是否有进展,您需要验证所有差异A[n+1] - A[n]是否相同(对于所有分区相同的几何)。你已经这样做了,你已经检查了一个特例。没有办法让它比O(n)更快,因为你至少必须阅读所有元素。

答案 1 :(得分:0)

您可以使用reduce功能,但您的版本会提前退出以进行非进展。

function isProgression(a){
  return a.length < 2 ? 1 : a.reduce( 
    (prev,curr,i) => i == 1 ? true : prev & (a[i] - a[i-1] == a[1] - a[0]) 
  );
}