64滑動視窗的最大值

2021-10-02 08:43:23 字數 1447 閱讀 2081

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。

基礎解法:暴力解答。對陣列進行滑動視窗陣列的劃分,再得到各小組的max,集合返回list。

高階解法:將滑動視窗用大頂堆代替,保證max在滑動視窗的第乙個位置,每次出一進一,集合返回list。得先把前size個的max找到,才能進迴圈。

/**

* 暴力解法

* @param num

* @param size

* @return

*/public

static arraylist

maxinwindows

(int

num,

int size)

arraylist

arraylist =

newarraylist

<

>()

;int begin =0;

while

(begin < num.length - size +1)

return arraylist;

}public

static

int[

]subnum

(int

num,

int begin,

int size)

return subnum;

}public

static

intretmax

(int

num)

}return max == integer.min_value ? null : max;

}/**

* 使用大頂堆代替滑動視窗,從而保證滑動視窗內的max在第乙個位置

* * @param num

* @param size

* @return

*/public

static arraylist

maxinwindows2

(int

num,

int size)

priorityqueue

queue =

newpriorityqueue

<

>

(new

comparator

()})

;for

(int i =

0; i < size; i++

) arraylist.

add(queue.

peek()

);for(

int i =

0, j = i + size; j < num.length; i++

, j++

)return arraylist;

}

64 滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 思路 暴力解法,時間複雜度o kn 不可取。用三個堆疊,其中兩個堆疊負責模擬佇列,存放劃窗內的數,另乙個堆疊存放當前最大值,...

64 滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 leetcode對應題目 239.滑動視窗最大值 題目解答 總結 用k來表示size。使用deque儲存視窗中最大值的下標,...

64 滑動視窗的最大值

題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 class solution 思路就是採用雙端佇列,佇列中的頭節點儲存的資料比後面的要大。比如當前假如的資料比隊尾...