leetCode 239 滑動視窗最大值

2021-10-13 17:15:53 字數 918 閱讀 8871

使用乙個優先佇列(大頂堆)維護每個視窗的最大最大值。使用兩個指標right, left維護視窗的移動,當right - left + 1 == k 時說明視窗移動到了下乙個位置,佇列中新增乙個元素,需要考慮堆頂元素是否還在視窗中,如果不在視窗中則需要一直彈出堆頂元素,最後在視窗中的堆頂元素即為當前視窗的最大值。

class

solution);

if(right - left +

1== k)

ans.

add(pair[0]

);left++;}

}int

res =

newint

[ans.

size()

];int i =0;

for(integer num : ans)

return res;

}}

維護乙個單調佇列,佇列的元素為nums陣列元素的下標。保持deque中下標對應的nums陣列的值為單調遞減狀態,這樣佇列頭部元素就是最大值,與第一種解法一樣需要保證佇列頭部元素對應的最大值在視窗中,因此如果佇列頭部不在視窗中則需要將頭部元素不斷彈出

class

solution

deque.

offerlast

(right);if

(right - left +

1== k)

ans[right - k +1]

= nums[deque.

peek()

];left++;}

}return ans;

}}

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