題目描述:
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 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
解析:
第一種方法:
首先確定新陣列的大小,就是nums.length-k+1,
然後是兩層for迴圈,解決,第一層for迴圈是滑動視窗的大小,第二層for迴圈是在滑動視窗內確定最大值。
時間複雜度:o(mn),空間複雜度o (1)
class
solution
int max =0;
for(
int i =
0; i < length; i++)}
array[i]
= max;
}return array;
}}
第二種方法:
借助雙向佇列的特點,兩端都可以進行進和出。
時間複雜度是o(n),空間複雜度o(n).
思路遍歷陣列,將數存放在雙向佇列中,並用l,r來標記視窗的左邊界和右邊界。佇列中儲存的並不是真的數,而是該數值對應的陣列下標位置,並且陣列中的數要從大到小排序。如果當前遍歷的數比隊尾的值大,則需要彈出隊尾值,直到佇列重新滿足從大到小的要求。剛開始遍歷時,l和r都為0,有乙個形成視窗的過程,此過程沒有最大值,l不動,r向右移。當視窗大小形成時,l和r一起向右移,每次移動時,判斷隊首的值的陣列下標是否在[l,r]中,如果不在則需要彈出隊首的值,當前視窗的最大值即為隊首的數。
示例輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
輸出: [3,3,5,5,6,7]
解釋過程中佇列中都是具體的值,方便理解,具體見**。
初始狀態:l=r=0,佇列:{}
i=0,nums[0]=1。隊列為空,直接加入。佇列:
i=1,nums[1]=3。隊尾值為1,3>1,彈出隊尾值,加入3。佇列:
i=2,nums[2]=-1。隊尾值為3,-1<3,直接加入。佇列:。此時視窗已經形成,l=0,r=2,result=[3]
i=3,nums[3]=-3。隊尾值為-1,-3<-1,直接加入。佇列:。隊首3對應的下標為1,l=1,r=3,有效。result=[3,3]
i=4,nums[4]=5。隊尾值為-3,5>-3,依次彈出後加入。佇列:。此時l=2,r=4,有效。result=[3,3,5]
i=5,nums[5]=3。隊尾值為5,3<5,直接加入。佇列:。此時l=3,r=5,有效。result=[3,3,5,5]
i=6,nums[6]=6。隊尾值為3,6>3,依次彈出後加入。佇列:。此時l=4,r=6,有效。result=[3,3,5,5,6]
i=7,nums[7]=7。隊尾值為6,7>6,彈出隊尾值後加入。佇列:。此時l=5,r=7,有效。result=[3,3,5,5,6,7]
class
solution
// 新增當前值對應的陣列下標
queue.
addlast
(i);
// 判斷當前佇列中隊首的值是否有效
if(queue.
peek()
<= i-k)
// 當視窗長度為k時 儲存當前視窗中最大值
if(i+
1>= k)
}return result;
}}
LeetCode 239 滑動視窗最大值
class solution public int maxslidingwindow int nums,int k int numlen nums.length if nums null numlenmaxheap new priorityqueue a,b nums b nums a for in...
LeetCode 239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1...
leetcode239滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1...