使用乙個優先佇列(大頂堆)維護每個視窗的最大最大值。使用兩個指標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...