給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小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 思路就是採用雙端佇列,佇列中的頭節點儲存的資料比後面的要大。比如當前假如的資料比隊尾...