劍指 Offer 59 I 滑動視窗的最大值

2022-10-11 16:27:10 字數 1259 閱讀 1660

劍指 offer 59 - i. 滑動視窗的最大值

描述給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。

示例:

輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3

輸出: [3,3,5,5,6,7]

解釋:

​滑動視窗的位置               最大值

​---------------               -----

​[1 3 -1] -3 5 3 6 7       3

1 [3 -1 -3] 5 3 6 7       3

1 3 [-1 -3 5] 3 6 7       5

1 3 -1 [-3 5 3] 6 7       5

1 3 -1 -3 [5 3 6] 7       6

1 3 -1 -3 5 [3 6 7]     7

雙端佇列解法

思路:

i,j分別代表滑動視窗的左右邊界,初始化i=1-k,j=0,當還未形成視窗時,將遍歷到的元素加入到雙端佇列deque,並不斷

刪除佇列中比nums[j]小的數,保證佇列的單調遞減,將nums[j]加入到佇列,此時佇列的隊頭元素即為滑動視窗最大值

//雙端佇列解法

​public int maxslidingwindow(int nums, int k)

return res;

}

可以將 「未形成視窗」 和 「形成視窗後」 兩個階段拆分到兩個迴圈裡實現。**雖變長,但減少了冗餘的判斷操作。

public int maxslidingwindow(int nums, int k) 

res[0] = deque.peekfirst();

//形成視窗後

for (int i = k; i < nums.length; i++)

return res;

}

暴力解法

思路:編寫乙個max函式用於計算陣列指定範圍的最大值,然後在maxslidingwindow函式中不斷遍歷陣列計算區間最大值

class solution 

}return max;}​

public int maxslidingwindow(int nums, int k)

return res;}}

劍指offer59 I 滑動視窗的最大值

題目描述 給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。解析解法一 沒有任何優化,直接擷取陣列,依次遍歷求各陣列最大值 public int maxslidingwindow int nums,int k maxnums i max return maxnums 解法二...

劍指 Offer 59 I 滑動視窗的最大值

給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6...

劍指 Offer 59 I 滑動視窗的最大值

給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6...