JavaScript 程式查詢平均值最小的子陣列
我們將編寫一個程式來查詢平均值最小的子陣列。為此,我們將遍歷陣列並跟蹤當前子陣列及其總和。對於每個元素,我們將計算當前子陣列的平均值,並將其與到目前為止看到的最小平均值進行比較。如果它更低,我們將更新最小平均值以及子陣列的起始和結束索引。在迭代結束時,我們將返回平均值最小的子陣列。
方法
要查詢平均值最小的子陣列,我們可以按照以下步驟操作:
初始化兩個變數start 和 end,以跟蹤子陣列的起始和結束索引。
使用for迴圈遍歷陣列,跟蹤當前總和和到目前為止找到的最小平均值。
在每次迭代中,將當前總和與最小平均值進行比較,如果找到新的最小值,則更新start和end變數。
如果當前總和大於最小平均值,則將起始索引向前移動,直到總和小於最小平均值。
重複步驟 2-4,直到到達陣列的末尾。
平均值最小的子陣列是從start開始到end結束的子陣列。
示例
給定一個整數陣列,找到平均值最小的子陣列。
這是一個完整的 JavaScript 工作示例來解決問題:
function findsmallestAverageSubarray(arr, k) { let minAvg = Number.POSITIVE_INFINITY; let minAvgStart = 0; let windowSum = 0; for (let i = 0; i < arr.length - k + 1; i++) { if (i === 0) { for (let j = 0; j < k; j++) { windowSum += arr[j]; } } else { windowSum -= arr[i - 1]; windowSum += arr[i + k - 1]; } let windowAvg = windowSum / k; if (windowAvg < minAvg) { minAvg = windowAvg; minAvgStart = i; } } return arr.slice(minAvgStart, minAvgStart + k); } const arr = [1, 3, 6, -3, -4, 2, 5]; const k = 4; console.log(findsmallestAverageSubarray(arr, k));
解釋
函式findSmallestAverageSubarray以整數陣列arr和整數k作為輸入,其中 k 是子陣列的長度。
該函式返回平均值最小的子陣列。
minAvg變數初始化為浮點數的最大可能值。
minAvgStart變數用於儲存平均值最小的子陣列的起始索引。
windowSum變數用於儲存當前子陣列中元素的總和。
外迴圈for (let i = 0; i < arr.length - k + 1; i++)用於迭代給定陣列arr中長度為k的所有可能的子陣列。
內迴圈for (let j = 0; j < k; j++)用於計算當前子陣列中元素的總和。
if (i === 0)塊用於計算第一個子陣列中元素的總和。
else塊用於計算其餘子陣列中元素的總和。它減去前一個子陣列的第一個元素,並添加當前子陣列的最後一個元素。
windowAvg變數用於儲存當前子陣列的平均值。
if (windowAvg < minAvg)塊用於更新最小平均值和平均值最小的子陣列的起始索引。
最後,該函式返回平均值最小的子陣列。