堆的拼音,堆栈
1.heapq堆Python中只有最小的堆:
Import heap=[] heap.heap push (a,3) #添加元素heap.heap push (a,2) heap.heap push (a,1)while len(a): #判断堆的长度print(heapq.heappop(a)) #弹出堆的顶部元素#将列表转换为最小堆nums=[2,3,1,4,5,6]heapq . heap ify(nums)while len(nums):print(heapq . heap pop(nums))#转换为堆推(max _ heap,i * -1) #将当前元素乘以-1,然后取出来乘以-12。数组215中第k个最大的元素。数组中第k个最大的元素
给定一个整数数组nums和一个整数k,请返回数组中第k个最大的元素。
请注意,你需要在数组排序后找到第k个最大的元素,而不是第k个不同的元素。
示例1:
输入:[3,2,1,5,6,4]并且k=2
输出:5
示例2:
输入:[3,2,3,1,2,4,5,5,6]并且k=4
输出:4
1=k=nums.length=104
-104=nums[i]=104
问题1:最小的堆变成了最大的堆。
导入heapq
类别解决方案:
def findKthLargest(self,nums: List[int],k: int) - int:
#最小堆变成最大堆
a=列表(映射(x:x *-1,nums))
heapq.heapify(a)
r=
而k:
r=heapq.heappop(a) * -1
k -=1
返回r
问题2:
导入heapq
类别解决方案:
def findKthLargest(self,nums: List[int],k: int) - int:
nums.sort()
返回数字[-k]
3.前k个高频词
92.前K个高频词
给定单词列表单词和整数k,返回出现次数最多的前k个单词。
返回的答案应该按照词频从高到低排序。如果不同的单词出现频率相同,就按字典顺序排序。
示例1:
输入:单词=[i , love , leetcode , I , love , coding],k=2
输出:[我,爱]
分析:‘我’和‘爱’是出现次数最多的两个词,都是2次。
注意,按字母顺序,I在love之前。
示例2:
输入:[the , day , is , sunny , the , sunny , is , is],k=4
输出:[the , is , sunny , day]
分析:“the”,“is”,“sunny”和“day”是出现频率最高的四个词,
出现次数依次为4、3、2、1次。
1=单词。长度=500
1=单词[i]=10
单词[i]由小写英文字母组成。
k的取值范围是[1,不同单词的个数[i]]
问题1:最大堆哈希表
导入heapq
从集合导入计数器
类别解决方案:
def topk frequency(self,words: List[str],k: int) - List[str]:
信息=计数器(单词)
max_heap=[]
对于word,info.items()中的cnt:
heapq.heappush(max_heap,(-cnt,word))
r=[]
而k:
temp=heapq.heappop(max_heap)
r.append(temp[1])
k -=1
返回r
Heapq.heappush([],item):可以添加元组,按照第一个元素排序。如果第一个元素相同,则按照字典顺序对它们进行排序。
def演示1():
words=[(2, b ),(2, a ),(3, b ),(1, c)]
min_heap=[]
逐字逐句:
heapq.heappush(min_heap,word)
while len(min_heap):
print(heapq.heappop(min_heap))
(1,“c”)
(二,“甲”)
(2,“b”)
(3,“b”)
问题2: cmp_to_key已排序
导入heapq
从功能工具导入cmp_to_key
类别解决方案:
def topk frequency(self,words: List[str],k: int) - List[str]:
#哈希表中保存的字数
信息={}
逐字逐句:
info[word]=info.get(word,0) 1
#排序
定义比较(字1、字2):
比较两个相邻单词
if info[word1]==info[word2]:
#如果字数相同,比较单词的字典顺序
如果word1 word2:
返回-1
否则:
返回1
Elif info[word1] info[word2]: #前一个字的次数大于后一个字的次数,所以不交换。
返回-1
否则:
1 #如果退货少于,换货
返回排序后的(info.keys(),key=cmp_to_key(compare))[:k]
注意:sorted的关键参数提供的比较函数默认只能提供一个元素。如果要比较两个元素,可以使用cmp_to_key方法。参考:692。前k个高频词的Python双解,含教会!
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。