239. 滑动窗口最大值
from collections import deque
class MyQueue:
def __init__(self):
self.que = deque()
def pop(self,value):
if self.que and value == self.que[0]:
self.que.popleft()
def push(self,value):
while self.que and value>self.que[-1]:
self.que.pop()
self.que.append(value)
def front(self):
return self.que[0]
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
que = MyQueue()
result = []
for i in range(k): ###先开始初始化值
que.push(nums[i])
result.append(que.front())
for i in range(k,len(nums)):
que.pop(nums[i-k])
que.push(nums[i])
result.append(que.front())
return result
先构造单调队列再从总体思路出发
347.前 K 个高频元素
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
map1 = {}
for i in range(len(nums)):
map1[nums[i]] = map1.get(nums[i],0)+1
pri_heapq = []
for value,freq in map1.items():
heapq.heappush(pri_heapq,(freq,value))
if len(pri_heapq)>k:
heapq.heappop(pri_heapq)
result = [0]*k
for i in range(k-1,-1,-1):
result[i] = heapq.heappop(pri_heapq)[1] ###错误在这里
return result
构造小顶栈因为pop的是队列中最小值,所以要倒叙赋值才是从从大到小的结果