LeetCode.239 滑动窗口最大值
思路: 维护一个单调队列
from collections import deque
class MyDeque():
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 self.que[-1] < value:
self.que.pop()
self.que.append(value)
def get(self):
return self.que[0]
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
que = MyDeque()
res = []
for i in range(k):
que.push(nums[i])
res.append(que.get())
for left, right in zip(range(len(nums)-k), range(k, len(nums))):
que.pop(nums[left])
que.push(nums[right])
res.append(que.get())
return res
LeetCode.347.前 K 个高频元素
思路: 维护一个优先队列(小根堆)
dic = {}
for i in nums:
dic[i] = dic.get(i, 0) + 1
res = []
for key, value in dic.items():
heappush(res, (value, key))
if len(res) > k:
heappop(res)
return [i[1] for i in res]