heapq堆Python中只有最小的堆,堆栈

  堆的拼音,堆栈

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: