這篇文章要跟大家分享的是關於js中實現滑動視窗的最大值的演算法,內容很不錯,有需要的朋友可以參考一下,希望可以幫助到大家。
給定一個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3,那麼一共存在6個滑動窗口,他們的最大值分別為{4,4,6, 6,6,5};針對陣列{2,3,4,2,6,2,5,1}的滑動視窗有以下6個: {[2,3,4],2,6,2,5 ,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4 ,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5, 1]}。
仔細想想,對於陣列{2,3,4,2,6,2,5,1}來說,假如視窗大小為3 ,則整個過程如下:
{[2,3,4],2,6,2,5,1},此時最大值為4
{2,[3,4,2],6,2,5,1},此時最大值為4
#程式碼實作
function maxInWindows(arr, size) { if(size > arr.length || size === 0) return []; var res = [], maxIndex = -1; for(var l = 0, r = size-1;r < arr.length;l++, r++){ if(maxIndex < l){ maxIndex = getMaxIndex(arr, l, r); } if(arr[r] > arr[maxIndex]){ maxIndex = r; } res.push(arr[maxIndex]); } return res; } function getMaxIndex(arr, l, r){ var index = l; for(var i = l;i <= r;i++) { if(arr[i] > arr[index]) index = i; } return index; }
以上是js中實作滑動視窗的最大值的演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!