昨天介紹完了 sliding window,但不斷重新計算每個 sliding window 內的總和,並不是聰明的方法
來觀察一下
所謂『前一個 window』與『後一個 window』之間的差異是什麼
從這裡可以知道,window1 跟 window2 只差最前跟最後的數字,中間的部分完全相同
因此我們可以這樣理解
sumOfCurrentWindow - valueOfPrevElement + valueOfNextElement = sumOfNextWindow
照剛才觀察的邏輯去修改 function
說明一下
function getMinValue(arr, windowSize) {
let minSum = Infinity;
// exclude windowSize is larger than array itself
if(windowSize> arr.length){
return false;
}
// get sum of first window
let currentSum = arr.slice(0,windowSize).reduce((a,b)=>a+b);
for(let i=windowSize;i<arr.length;i++){
currentSum = currentSum - arr[i-windowSize] + arr[i];
if(currentSum < minSum ){
minSum = currentSum;
}
}
return minSum;
}
getMinValue([2, 7, 3, 0, 6, 1, -5, -12, -11], 3); // return -28