排除最小值和最大值的陣列平均值 JavaScript


在這個問題陳述中,我們的任務是利用 Javascript 功能找到陣列的平均值,排除陣列中的最小值和最大值。這個任務可以透過排除最小值和最大值並計算其餘元素的平均值來完成。

給定問題的邏輯

為了建立解決這個問題的程式,我們將使用 Javascript 的 Math 函式,藉助 min 和 max 關鍵字獲取最小值和最大值。

獲得最小值和最大值後,我們將過濾陣列並從陣列中排除這些值。然後使用 reduce 方法計算剩餘值的平均值。

演算法

步驟 1 − 開始時,我們將建立一個函式來計算陣列元素的平均值,並將陣列傳遞給它。

步驟 2 − 因為我們需要從陣列中排除最小值和最大值。此步驟將找出給定陣列的最小和最大項。為了獲得這些值,我們將使用 Math 函式和 min 和 max 關鍵字。

步驟 3 − 獲得最小值和最大值後,現在是將它們從陣列中排除的時候了,因為我們必須計算陣列中剩餘項的平均值。為了執行此過程,我們將使用 filter 方法來過濾掉這些元素。

步驟 4 − 由於我們已經排除了陣列的最小值和最大值,現在我們將計算陣列其餘元素的總和。為了對其餘項求和,我們將使用 reduce 方法。

步驟 5 − 現在我們有了其餘元素的總和,現在將其除以剩餘元素的長度以獲得它們的平均值。

步驟 6 − 最後,返回其餘元素的平均值作為輸出。

演算法程式碼

function average(arr) {
   const min = Math.min(...arr);
   const max = Math.max(...arr);
   //filter the input array and exclude min and max values
   const filterArr = arr.filter(x => x !== min && x !== max);
   const sum = filterArr.reduce((acc, val) => acc + val, 0);
   return sum / filterArr.length;
}
const arr = [10, 20, 30, 40, 50];
const avg = average(arr);
console.log(avg);

在上面的程式碼中,我們使用了一些 Javascript 的內建函式來使程式碼更簡單快捷。藉助 Math 函式,我們找到了最小值和最大值。filter 方法將它們從陣列中過濾掉。最後,reduce 方法計算其餘項的總和。

因此,我們的輸出是 30,因為其餘元素 20、30、40 的平均值為 30。此處 10 是陣列中最小的元素,50 是陣列中最大的元素。根據問題陳述,我們排除了這兩個元素以獲得所需的結果。

複雜度

假設 n 是輸入陣列的長度,則上面程式碼的時間複雜度為 O(n)。因為我們多次迭代了所有元素,但每次迭代都是線性時間的。上面程式碼的空間複雜度為 O(n),因為我們建立了一個新陣列來儲存過濾後的項。

結論

這就是我們解決上述問題的方法。我們基本上使用了 Javascript 的 reduce 和 Math 函式來獲得所需的結果。問題指出我們必須排除最小值和最大值,並顯示其餘元素的平均值。因此,執行問題所需的時間為 O(n),因為陣列中有 n 個項。

更新於:2023年5月18日

635 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始
廣告