面试题 17.14. 最小K个数

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

示例:

输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:

0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))

1.暴力直接排序 ologn

2.堆,nlogk,用前k个数维护一个大根堆,后面的数如果比根小则替换根,最后留下来的就是答案

class Solution:
    def smallestK(self, arr: List[int], k: int) -> List[int]:
        if k<=0:return []
        if k>=len(arr):return arr
        tmp=[]
        for i in range(k):
            heapq.heappush(tmp,-arr[i])
        for i in range(k,len(arr)):
            if arr[i]<-tmp[0]:
                heapq.heappop(tmp)
                heapq.heappush(tmp,-arr[i])
        return [-t for t in tmp ]

 

你可能感兴趣的:(Leetcode)