1、
python中的数据结构deque
double end quene (双向队列)使用双向链表来实现或数组实现
解题关键:
维护一个双向队列。这个队列,有三个功能,push,pop,front
push的时候:删除队列末尾比push的数字小的全部值
pop的时候:仅对首最大值等与value的时候才pop
front:que【0】
先把k个数字push进去,再循环数组(k,len(nums))
依次执行pop,push,front操作
from collections import deque
class Myque:
def __init__(self):
self.que = deque()
def pop(self,value):
if self.que and self.que[0]==value:
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 = Myque()
res = []
for i in range(k):
que.push(nums[i])
res.append(que.front())
for i in range(k,len(nums)):
que.pop(nums[i-k])
que.push(nums[i])
res.append(que.front())
return res
大顶堆:父节点均大于子节点
小顶堆:父节点均小于子节点
python中heapq的操作
heapq.heappop(heap)
heapq.heappush(heap,())
本题使用小顶堆进行操作
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
map_={}
for i in nums:
map_[i]=map_.get(i,0)+1
result=[]
que=[]
for key,freq in map_.items():
heapq.heappush(que,(freq,key))
if len(que)>k:
heapq.heappop(que)
for i in range(k,0,-1):
result.append(heapq.heappop(que)[1])
return result