239. 滑动窗口最大值 (一刷至少需要理解思路)
之前讲的都是栈的应用,这次该是队列的应用了。
本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0239.滑动窗口最大值.html
思考
用单调队列实现,太难了,超过能力范围了,跳过。
347.前 K 个高频元素 (一刷至少需要理解思路)
大/小顶堆的应用, 在C++中就是优先级队列
本题是 大数据中取前k值 的经典思路,了解想法之后,不算难。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0347.前K个高频元素.html
思考
- 哈希+内置排序
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
num_dict = defaultdict(int)
for c in nums:
num_dict[c]+=1
index_dict = defaultdict(list)
for key in num_dict:
index_dict[num_dict[key]].append(key)
keys = list(index_dict.keys())
keys.sort(reverse=True)
cnt = 0
res = []
for key in keys:
res+=index_dict[key]
cnt=len(res)
if cnt == k:
break
return res
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
num_dict = defaultdict(int)
for c in nums:
num_dict[c]+=1
kvlist = []
for num,freq in num_dict.items():
kvlist.append((freq,num))
kvlist.sort(key=lambda x:x[0],reverse=True)
res = []
for item in kvlist[:k]:
res.append(item[1])
return res
- 哈希+最小堆
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
num_dict = defaultdict(int)
for c in nums:
num_dict[c]+=1
pri_que = [] #小顶堆
for num,freq in num_dict.items():
heapq.heappush(pri_que,(freq,num))
if len(pri_que)>k:
heapq.heappop(pri_que)
res = []
print(pri_que)
for item in pri_que:
res.append(item[1])
return res
标签:13,num,int,res,347,dict,239,key,que
From: https://www.cnblogs.com/forrestr/p/18229785