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

方法一:内置函数sorted()def getLeastNumbers(self, arr: List[int], k: int) -> List[int]: return sorted(arr)[:k]sorted()内部的排序方法为归并排序时间复杂度O(nlogn) 空间复杂度O(logn)...
摘要由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]
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值