請定義乙個佇列並實現函式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 解釋 滑動視窗的位置 最大...