劍指offer 64 滑動視窗的最大值

2021-09-05 02:13:41 字數 933 閱讀 5249

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小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個 這道題我們需要轉換下參考物件,像物理學中一樣。題目描述的是滑動視窗在陣列上移動。如果我們以滑動視窗為物件,那麼就是陣列在滑動...