滑動視窗的最大值 佇列的最大值

2021-09-26 10:48:25 字數 2457 閱讀 3761

請定義乙個佇列並實現函式max得到佇列裡的最大值,要求函式max、push_back和

pop_front的時間複雜度都是o(1)。

在佇列中維護乙個儲存最大值的佇列,當pop和push操作的同時也對最大值佇列進行維護。當彈出的時佇列中的最大值時,也彈出最大值佇列的頭,當壓入新值時,對最大值佇列從後向前掃瞄剔除小於該值的元素。

時間複雜度:o(1)

空間複雜度:o(n)

class queue(object):

def __init__(self):

self.data =

self.max_data =

def pop(self):

"""pop out the head element

:return: head element

"""if not self.data:

raise exception('empty queue cannot pop')

if self.data[0] == self.max_data[0]:

self.max_data.pop(0)

return self.data.pop(0)

def push(self, x):

"""push in the back

:param x: element

:return: none

"""while self.max_data and self.max_data[-1] < x:

self.max_data.pop()

return

def max(self):

"""get the maximum element

:return: max element

"""return self.max_data[0]

給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。

如輸入:[2, 3, 4, 2, 6, 2, 5, 1], 滑動視窗大小3      輸出:[4, 4, 6, 6, 6, 5]

def max_in_sliding_window(array, window_width):

""":param array: numbers

:param window_width:sliding window size

:return: all max number

"""if not array or window_width < 1:

return none

max_i =

res =

for i in range(len(array)):

while max_i and array[i] >= array[max_i[-1]]:

max_i.pop()

while max_i and i - max_i[0] >= window_width:

max_i.pop(0)

if window_width - 1 <= i:

return res

# -*- coding:utf-8 -*-

class solution:

def findfirst(self,num,start,end):

maxnum = num[start]

for i in range(start,end+1):

if maxnum < num[i]:

maxnum = num[i]

return maxnum

def maxinwindows(self, num, size):

# write code here

if not num or size < 1 or size > len(num):

return

res =

left = 0

right = size - 1

while right < len(num) - 1:

left += 1

right += 1

return res

from collections import deque

class solution(object):

def maxslidingwindow(self, nums, k):

""":type nums: list[int]

:type k: int

:rtype: list[int]

"""if not nums or k>len(nums):

return

q = deque()

res =

for i in range(len(nums)):

while q and nums[q[-1]]=k-1:

return res

滑動視窗最大值

題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 幾個注意點 利用雙端佇列實現,如果後者比前者大,前者丟擲,後者進,如果比前者小,壓入佇列,判斷隊頭是否過期,這就需...

滑動視窗最大值

給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。public class 滑動視窗的最大值 if num.length size size 1 用來儲存可能是滑動視窗最大值的數字的下標 linkedlist indexdeque newlinkedlist for int i 0 i s...

滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...