JavaScript 程式查詢平均值最小的子陣列


我們將編寫一個程式來查詢平均值最小的子陣列。為此,我們將遍歷陣列並跟蹤當前子陣列及其總和。對於每個元素,我們將計算當前子陣列的平均值,並將其與到目前為止看到的最小平均值進行比較。如果它更低,我們將更新最小平均值以及子陣列的起始和結束索引。在迭代結束時,我們將返回平均值最小的子陣列。

方法

要查詢平均值最小的子陣列,我們可以按照以下步驟操作:

  • 初始化兩個變數startend,以跟蹤子陣列的起始和結束索引。

  • 使用for迴圈遍歷陣列,跟蹤當前總和和到目前為止找到的最小平均值。

  • 在每次迭代中,將當前總和與最小平均值進行比較,如果找到新的最小值,則更新startend變數。

  • 如果當前總和大於最小平均值,則將起始索引向前移動,直到總和小於最小平均值。

  • 重複步驟 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)塊用於更新最小平均值和平均值最小的子陣列的起始索引。

  • 最後,該函式返回平均值最小的子陣列。

更新於: 2023-03-15

130 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告