劍指 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...