from collections import deque
classMyQueue:def__init__(self):
self.queue = deque()# 弹出的时候需要比较出口元素是否相等!相等弹出defpop(self,value):if self.queue and value == self.queue[0]:
self.queue.popleft()# 维护队列中的元素的从大到小的defpush(self, value):while self.queue and value > self.queue[-1]:
self.queue.pop()
self.queue.append(value)deffront(self):return self.queue[0]# 先判断前面的元素弹出,在插入后面的元素classSolution:defmaxSlidingWindow1(self, nums: List[int], k:int)-> List[int]:
que = MyQueue()
result =[]for i inrange(k):
que.push(nums[i])
result.append(que.front())for i inrange(k,len(nums)):# 滑动窗口移除到最前面元素
que.pop(nums[i - k])# 滑动窗口前加入最后的元素
que.push(nums[i])
result.append(que.front())return result
defmaxSlidingWindow(self, nums: List[int], k:int)-> List[int]:# 自己实现单调队列
que =[]
result =[]for i inrange(k):while que and que[-1]< nums[i]:
que.pop(-1)# list.pop()时间复杂度是o(N) 这里会超时
que.append(nums[i])
result.append(que[0])for i inrange(k,len(nums)):if que and que[0]== nums[i - k]:
que.pop(0)while que and que[-1]< nums[i]:
que.pop(-1)
que.append(nums[i])
result.append(que[0])return result
第一种
f =zip(d.keys(), d.values())
c =sorted(f)
第二种
a =sorted(d.items(), key=lambda x: x[1])
a1 =sorted(d.items(),key =lambda x:x[1],reverse =True)
import heapq
classSolution:deftopKFrequent1(self, nums: List[int], k:int)-> List[int]:
dict_1 ={}
res =[]for v in nums:if v in dict_1:
dict_1[v]+=1else:
dict_1[v]=1
a1 =sorted(dict_1.items(),key =lambda x:x[1],reverse =True)# print(a1)for i in a1[:k]:
res.append(i[0])return res
# 使用堆来实现deftopKFrequent(self, nums: List[int], k:int)-> List[int]:
map_ ={}# 统计元素出现的频率for i inrange(len(nums)):
map_[nums[i]]= map_.get(nums[i],0)+1# 对map进行排序# 定义一个小顶堆 大小为k
pri_que =[]for key, value in map_.items():
heapq.heappush(pri_que,(value, key))iflen(pri_que)> k:# 如果堆的大小大于了K 则队列弹出,保证对大小为k
heapq.heappop(pri_que)
result =[0]* k
for i inrange(k -1,-1,-1):
result[i]= heapq.heappop(pri_que)[1]return result