劍指offer 滑動視窗的最大值(c )

2021-09-24 12:18:22 字數 1063 閱讀 9548

題目描述

給定陣列,和滑動視窗的大小,請找出所有滑動視窗內的最大值。

例如,陣列,滑窗大小為3,那麼結果為。

思路使用雙向佇列,用來儲存有可能是滑動視窗最大值的陣列的下標。在存入乙個數字的下標之前,首先要判斷佇列裡已有數字是否小於待存入的數字。如果已有的數字小於待存入的數字,那麼這些數字已經不可能是滑動視窗的最大值,因此需要在佇列尾部刪除(pop_back)。同時,如果佇列頭部的數字已經從視窗裡滑出,那麼滑出的數字也需要從佇列的頭部刪除(pop_front)。

陣列的長度為3的滑動視窗最大值求解步驟如下

步驟    插入數字    滑動視窗    佇列中的下標   最大值

1 2 2 0(2) n/a

2 3 2,3 1(3) n/a

3 4 2,3,4 2(4) 4

4 2 3,4,2 2(4),3(2) 4

5 6 4,2,6 4(6) 6

6 2 2,6,2 4(6),5(2) 6

7 5 6,2,5 4(6),6(5) 6

8 1 2,5,1 6(5),7(1) 5

**
class

solution

dq.push_back

(i);

}for

(int i = size; i < nums.

size()

;++i)

res.

push_back

(nums[dq.

front()

]);return res;}}

;

劍指offer 滑動視窗最大值

很多題解都是用雙端佇列,但是既然是區間最值得問題,那麼可以用st表 唯一注意的是引數陣列的大小一定要大於視窗的大小,不然沒意義,即 中的len size的時候退出 果然還是引數的合法性一定要考慮,尤其是提示段錯誤的時候,而自己在本地測試沒問題,一般都是引數合法性的問題!一開始就是漏了這個條件,一直提...

劍指offer 滑動視窗的最大值

題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們 的最大值分別為 針對陣列的滑動視窗有以下6個 思路描述 掃瞄給定的陣列,用乙個大小為size的堆維護,將這次的元素加入堆中,找出其中的最大值 然後利用firs...

劍指offer 滑動視窗的最大值

題目 劍指offer 滑動視窗的最大值 暴力列舉視窗。class solution ret.push back max return ret 這個思路也是參考了網上的方法,非常的巧妙。對於,設計乙個que.它的功能是儲存滑動視窗可能的最大值,整個視窗按降序進行排列。隊頭的最大值是當前滑動視窗的最大值...