python刷題 單調佇列

2022-06-06 03:03:10 字數 1652 閱讀 7417

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