class solution:
def maxslidingwindow(self, nums: list[int], k: int) -> list[int]:
from collections import deque
queue = deque()
res =
for i in range(len(nums)):
if i < k - 1:
# 先初始化視窗裡面的值
else:
# 視窗開始移動
儘管我們已經使用了雙向佇列,但是還是超時了。下面是修改後的**:
from collections import deque
class solution:
def maxslidingwindow(self, nums: list[int], k: int) -> list[int]:
queue = deque()
res =
# 我們儲存的是索引
for i in range(len(nums)):
# 如果i >= k且最大值正好位於視窗左端,則將其移除
if i >= k and i - k == queue[0]:
queue.popleft()
# 如果當前值比queue裡面最後的值要大,則刪除queue最後的值
while queue and nums[i] >= nums[queue[-1]]:
queue.pop()
if i >= k-1:
# queue中的首位保證是最大值
return res
舉個例子:
單調佇列水題 刷廣告
問題描述 最近,afy決定給toj印刷廣告,廣告牌是刷在城市的建築物上的,城市裡有緊靠著的n個建築。afy決定在上面找一塊盡可能大的矩形放置廣告牌。我們假設每個建築物都有乙個高度,從左到右給出每個建築物的高度h1,h2 hn,且0 要求輸出廣告牌的最大面積。輸入檔案 輸入檔案 ad.in 中的第一行...
Leetcode刷題筆記python 單調數列
如果陣列是單調遞增或單調遞減的,那麼它是單調的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞增的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞減的。當給定的陣列 a 是單調陣列時返回 true,否則返回 false。示例 1 輸入 1,2,2,3 輸出 true 示例...
Queue 單調佇列題
題意 比當前的數更小的數之間的數最多有幾個 很簡單的一道單調佇列題,求出乙個單增佇列,那麼比當前數小的數一定在單增佇列裡面,不過這題需要二分查詢佇列裡的元素,不然會t ac include using namespace std const int n 1e5 50 int ans n struct...