我的意思是对于给定的数组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库是否有更紧凑和/或更有效的方式来实现这一点,或者是否有一般的方式。
答案 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])
);
}