239. 滑动窗口最大值
#伪代码
deque<int> que;
pop(int val){
if(!que.empty()&&val==que.front())
que.pop_front();
}
push(int val){
if(!que.empty()&&val>que.back())
que.pop_back();
que.push_back(val);
}
getmaxvalue()
return que.front();
from collections import deque
class Myqueue:
def __init__(self):
self.queue=deque()
def pop(self,value):
if self.queue and value==self.queue[0]:
self.queue.popleft()
def push(self,value):
while self.queue and value>self.queue[-1]:
self.queue.pop()
self.queue.append(value)
def getMaxValue(self):
return self.queue[0]
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
result=[]
que=Myqueue()
#先输入前k个元素
for i in range(k):
que.push(nums[i])
result.append(que.getMaxValue())
for i in range(k,len(nums)):
que.pop(nums[i-k])
que.push(nums[i])
result.append(que.getMaxValue())
return result
347.前 K 个高频元素
map key可代表元素 value代表元素出现的次数
#伪代码
for(i=0;i<nums.size();i++){
map[nums[i]]++;
}
#小顶堆
priority_queue.(<key,value>,cmp());
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
map0={}
for i in nums:
if i in map0:
map0[i]+=1
else:
map0[i]=1
#定义小顶堆
pro_que=[]
for key,fre in map0.items():
heapq.heappush(pro_que,(fre,key))
if len(pro_que)>k:
heapq.heappop(pro_que)
result=[0]*k
for i in range(k-1,-1,-1):
result[i]=pro_que[0][1]
heapq.heappop(pro_que)
return result