在 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() 方法是確定一組數字是否為累加序列的有用工具。