JavaScript 中陣列 n 個連續元素的最大和
在給定的問題陳述中,我們的目標是利用 Javascript 功能找到陣列中 n 個連續項的最大和。因此,為了解決這個問題,我們將使用基本的 Javascript 功能並生成最大和。
理解問題
手頭的問題是找到陣列中 n 個連續項的最大和。此過程將涉及在給定陣列中識別長度為 n 的連續子陣列,該子陣列具有最大可能的和。例如,假設我們有一個數組 [1, 2, 4, 7, 3, 5],因此如果 n 的值為 2,則 2 個連續項為 4、7,最大和為 11。
給定問題的邏輯
為了解決給定的問題,我們將使用一個函式來執行此任務。該函式將在陣列的開頭初始化兩個指標 left 和 right。之後,我們將向右移動 right 指標,並跟蹤視窗內項的當前和。現在,我們將檢查條件,如果視窗的大小大於 n,我們將從當前和中減去 left 指標處項的值。然後,我們將向右移動 left 指標。因此,我們將始終保持大小為 n 的視窗,並根據條件更新最大和。
演算法
步驟 1:由於我們必須找到陣列中 n 個連續項的最大和,因此為了執行此任務,我們將建立一個函式並將其命名為 maxSumOfNElements。此函式接受兩個引數:第一個是陣列 arr,第二個是數字 n。
步驟 2:因此,在上述函式中,我們將首先檢查 n 的值是否大於陣列的長度。如果條件為真,則返回 null 值,因為它不是有效的輸入。
步驟 3:驗證上述條件後,我們將初始化兩個變數 maxSum 和 currentSum 為零。maxSum 將儲存連續元素的最大和,currentSum 將儲存 n 個連續項的執行和。
步驟 4:由於我們已宣告將在這些步驟中使用的變數。現在,我們將計算陣列中前 n 個項的初始和,並將其儲存在 maxSum 和 currentSum 變數中。
步驟 5:此步驟將使用 for 迴圈遍歷陣列,並從索引 n 開始。
步驟 6:在迴圈中,我們將添加當前項並從 currentSum 中減去位於 n 個位置之後的項。
步驟 7:現在,我們將使用 maxSum 和 currentSum 之間的最大值更新 maxSum。
步驟 8:完成迴圈後,我們將返回陣列中 n 個連續項的最大和。
示例
//Function to find the maximum sum function maxSumOfNElements(arr, n) { if (n > arr.length) { return null; // Invalid input, as n is larger than array size } let maxSum = 0; let currentSum = 0; for (let i = 0; i < n; i++) { maxSum += arr[i]; } currentSum = maxSum; for (let i = n; i < arr.length; i++) { currentSum += arr[i] - arr[i - n]; maxSum = Math.max(maxSum, currentSum); } return maxSum; } const arr = [1, 3, 5, 2, 4, 6, 8]; const n = 3; const result = maxSumOfNElements(arr, n); console.log("Maximum sum of", n, "consecutive items:", result);
輸出
Maximum sum of 3 consecutive items: 18
複雜度
計算陣列中存在的 n 個連續項的最大和的時間複雜度為 O(n),其中 n 是陣列的長度。因為我們只遍歷了陣列一次。上述程式碼的空間複雜度為 O(1),因為我們只使用了恆定數量的空間來儲存變數。
結論
我們已有效地找到了陣列中 n 個連續項的最大和。這種方法用於以線性時間複雜度解決問題,對於大型陣列來說是一種有效的解決方案。