找到数组中最大(最小)的k个数 python解法

本文介绍了三种在Python中找到数组中最大或最小k个数的方法:1) 使用内置函数sorted(),时间复杂度为O(nlogn);2) 利用最大堆或最小堆,时间复杂度为O(nlogk),空间复杂度为O(k);3) 应用快速选择算法,平均时间复杂度为O(n),最坏情况下为O(n2)。对于最大堆和最小堆,Python内置了heapq库来辅助实现。
摘要由CSDN通过智能技术生成

方法一:内置函数sorted()

def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
    return sorted(arr)[:k]

sorted()内部的排序方法为归并排序
时间复杂度O(nlogn) 空间复杂度O(logn)

方法二:最大堆最小堆

求最小k个数用最大堆,求最大k个数用最小堆。
堆是有序排列的完全二叉树,最大堆为根节点为最大值,且父节点比子节点的值大;最小堆为根节点为最小值,且父节点比子节点的值小。
在求最大的k个数时,首先构建一个有k个节点的最小堆,根节点为最小值,然后每新进来一个数,则与根节点比较,若比根节点大,则将该点推入堆,将堆中的最小值点(根节点)推出。遍历完之后,留在堆里的就是最大的k个。
python内置有最小堆库,heapq
heapq.heapify(list) 将list转换为最小堆形式
heapq.heappop(heap) 将heap的最小值推出
heapq.heappush(heap,x) 将x推入heap中
heapq.replace(heap,x) 将x推入,同时将heap中最小元素推出

def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
    if k==0:
        return []
    hp=arr[:k]
    heapq.heapify(hp)
    for i in range(k,len(arr)):
        if hp[0]<arr[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值