在 JavaScript 中确定数字是否构成累加序列
这个问题要求确定数组中给定的数字是否构成累加序列。我们将检查,如果序列中任意两个相邻数字相加等于序列中的下一个数字,我们可以使用一个简单的过程来确认这一点。
理解问题
为了理解上述问题,我们需要首先深入了解问题。如果将问题分解成子问题,那么就更容易解决它。考虑解决问题需要遵循的任何重要程序或步骤。
所以首先我们需要确定什么是累加数或序列?累加序列必须包含三个或更多数字。除了前两个数字之外,序列中的每个连续数字都必须等于它前面两个数字的和。
Num = 112358 Since 2 = 1+1, 3 = 1 + 2, 5 = 2 + 3, and 8 = 3 + 5 —------> 112358 The result is true
为了解决这个问题,数字序列在 JavaScript 中形成一个复合序列。我们可以使用一个简单的算法来检查序列中任意两个相邻数字的和是否等于序列中的下一个数字。为了测试这个问题,我们将使用 existAdditiveSequence() 函数,您可以用不同的输入数组调用它并检查输出。
算法
步骤 1 − 声明一个函数并命名为 'existAdditiveSequence()',它接受一个整数元素数组作为参数。如果数字将形成累加序列,则返回 true,否则返回 false。
步骤 2 − 现在向前,从第二个索引开始,也就是序列中的第三个数字,第一步将遍历序列中的所有数字。
步骤 3 − 在遵循第二步时,我们将验证对于序列中的每个数字,前面连续数字的和是否等于当前数字。如果它不相等,则函数返回 false。因此,它将表明不存在数字的累加序列。如果循环结束时没有发现任何不一致,则函数返回 true,表明整数确实形成了累加序列。
步骤 4 − 在第三步之后,如果上述条件不满足,则结果将为 false。
示例
//create a function with name and argument function existAdditiveSequence(n) { for (let i = 2; i < n.length; i++) { if (n[i] !== n[i-1] + n[i-2]) { return false; } } return true; } // Define sequence of array const arr1 = [1, 1, 2, 3, 5, 8]; const arr2 = [1, 3, 4, 7, 11, 18]; const arr3 = [1, 2, 4, 7, 11, 18]; const arr4 = [1, 1, 2, 5, 7, 12]; // show result console.log(existAdditiveSequence(arr1), "---> An additive sequence") console.log(existAdditiveSequence(arr2), "---> An additive sequence"); console.log(existAdditiveSequence(arr3), "---> Not an additive sequence"); console.log(existAdditiveSequence(arr4), "---> Not an additive sequence");
输出
true ---> An additive sequence true ---> An additive sequence false ---> Not an additive sequence false ---> Not an additive sequence
数组 [1, 1, 2, 3, 5, 8] 和数组 [1, 3, 4, 7, 11, 18],创建了累加斐波那契序列。所以,结果为 true。
数组 [1, 2, 4, 7, 11, 18],不创建累加序列,因为前两个数字的和,3,不等于第三个数字,4,因为它应该等于。因此,输出将为 false。
数组 [1, 1, 2, 5, 7, 12],它不形成累加序列,因为第 2 个和第 3 个数字加在一起等于 3,这与第四个数字 5 不相同。所以,输出将为 false。
时间和空间复杂度
existAdditiveSequence() 函数具有 O(n) 的时间复杂度,其中 n 是输入数组的长度。这是因为该函数遍历输入数组一次,并确定每个数字是否为它前面两个数字的和。
该函数具有恒定的额外内存需求来保持循环索引以及当前、前一个和前前一个值,因此其空间复杂度为 O(1)。
结论
existAdditiveSequence() 方法是确定一组数字是否为累加序列的有用工具。