首頁 >web前端 >js教程 >js中實作滑動視窗的最大值的演算法

js中實作滑動視窗的最大值的演算法

不言
不言原創
2018-07-21 11:03:263155瀏覽

這篇文章要跟大家分享的是關於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 ,則整個過程如下:

  1. {[2,3,4],2,6,2,5,1},此時最大值為4

  2. {2,[3,4,2],6,2,5,1},此時最大值為4

  3. ##{2, 3,[4,2,6],2,5,1},此時最大值為6,因為新進入視窗的6比4還大

  4. {2,3 ,4,[2,6,2],5,1},此時最大值為6

  5. #{2,3,4,2,[6,2,5] ,1},此時最大值為6

  6. {2,3,4,2,6,[2,5,1]},此時最大值為5

可以的值和最新進入視窗的值哪個大,新進入的值大則更新maxIndex,否則不需要更新;若maxIndex不在視窗內,則要遍歷一次目前視窗的所有值找出新的maxIndex



#程式碼實作

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中利用兩個堆疊實作佇列的演算法

jquery中$()函數的使用方法

#

以上是js中實作滑動視窗的最大值的演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn