215. 数组中的第K个最大元素

215. 数组中的第K个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
在这里插入图片描述
方法1:直接排序法

class Solution:
    def findKthLargest(self, nums, k):
        nums1=sorted(nums,reverse=True)
        return nums1[k-1]           

方法2:堆排序法

class Solution:
    def findKthLargest(self, nums, k):
        temp=list()
        n=len(nums)
        for num in nums:
            heapq.heappush(temp,num)
        for i in range(n-k+1):
            ans=heapq.heappop(temp)
        return ans

堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆。( heapq库中的堆默认是最小堆)

  1. 最大堆,树中各个父节点的值总是大于或等于任何一个子节点的值。
  2. 最小堆,树中各个父节点的值总是小于或等于任何一个子节点的值。

python的heapq模块提供了对(最小)堆的建立和使用。
heapq堆数据结构最重要的特征是heap[0]永远是最小的元素。

heapq堆的常用方法:

1、heapq.heappush(heap, item)
heap为定义堆,item增加的元素。

import heapq
h = []
heapq.heappush(h,2)
h
[2]

2、heapq.heapify(list)
将列表转换为堆。

list = [1,2,3,5,1,5,8,9,6]
heapq.heapify(list)
list
[1, 1, 3, 5, 2, 5, 8, 9, 6]

3、heapq.heappop(heap)
删除并返回最小值,因为堆的特征是heap[0]永远是最小的元素,所以一般都是删除第一个元素。

list=[1, 1, 3, 5, 2, 5, 8, 9, 6]
heapq.heappop(list)
1
list
[1, 2, 3, 5, 6, 5, 8, 9]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值