給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
滑動視窗應當是佇列,但為了得到滑動視窗的最大值,佇列序可以從兩端刪除元素,因此使用雙端佇列。
原則:對新來的元素k,將其與雙端佇列中的元素相比較
1)前面比k小的,直接移出佇列(因為不再可能成為後面滑動視窗的最大值了!),
2)前面比k大的x,比較兩者下標,判斷x是否已不在視窗之內,不在了,直接移出佇列
佇列的第乙個元素是滑動視窗中的最大值
public
class
solution64
if(num.length >= size && size >=1)
deque.
addlast
(i);
}for
(int i = size -
1; i < num.length; i++
) deque.
addlast
(i);
if(i - deque.
getfirst()
+1> size)
ret.
add(num[deque.
getfirst()
]);}
}return ret;
}public
static
void
main
(string[
] args)
; beanutil.
print
(new
solution64()
.maxinwindows
(arr,3)
);}}
劍指offer64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 不能每次選取範圍再比較,這樣時間複雜度太高。可以建立乙個佇列,佇列首部是最大值索引,每次要先去掉小於當前數的所有索引,再去掉...
劍指offer64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 視窗大於陣列長度的時候,返回空 示例1輸入 2,3,4,2,6,2,5,1 3 返回值 4,4,6,6,6,5 思路1 暴力...
劍指offer(64)滑動視窗中的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 這道題我們需要轉換下參考物件,像物理學中一樣。題目描述的是滑動視窗在陣列上移動。如果我們以滑動視窗為物件,那麼就是陣列在滑動...