239. 滑动窗口最大值
暴力法(超时)
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
res = []
res.append(max(nums[:k]))
for i in range(k,len(nums)):
if nums[i-k] != res[-1]:
if nums[i] > res[-1]:
res.append(nums[i])
else:
res.append(res[-1])
else:
res.append(max(nums[i-k+1:i+1]))
return res
单调队列(待补充)
347. 前 K 个高频元素
from collections import defaultdict
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
d = defaultdict(int)
for i in nums:
d[i] += 1
sd = sorted(d.items(), key = lambda kv:(kv[1], kv[0]))
res = []
print(sd)
for key in sd:
res.append(key[0])
return res[-k:]
# pri_que = [] #小顶堆
# #用固定大小为k的小顶堆,扫面所有频率的数值
# # 记得把频率放在前面 才能实现排序
# for key, freq in d.items():
# heapq.heappush(pri_que, (freq, key))
# if len(pri_que) > k: #如果堆的大小大于了K,则队列弹出,保证堆的大小一直为k
# heapq.heappop(pri_que)
# print(pri_que)
# #找出前K个高频元素,因为小顶堆先弹出的是最小的,所以倒序来输出到数组
# result = [0] * k
# for i in range(k-1, -1, -1):
# result[i] = heapq.heappop(pri_que)[1]
# return result