题目描述
https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/
思路题解
基于快排的数组划分
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
if k>=len(arr):return arr
def quick_sort(l,r):
i,j=l,r
while i<j:
while i<j and arr[j]>=arr[l]:j-=1
while i<j and arr[i]<=arr[l]:i+=1
arr[i],arr[j]=arr[j],arr[i]
arr[l],arr[i]=arr[i],arr[l]
if k<i:return quick_sort(l,i-1)
if k>i:return quick_sort(i+1,r)
return arr[:k]
return quick_sort(0,len(arr)-1)
堆
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
if k==0:return []
if k>=len(arr):return arr
hp=[-x for x in arr[:k]]
heapq.heapify(hp)
for i in range(k,len(arr)):
if -hp[0]>arr[i]:
heapq.heappop(hp)
heapq.heappush(hp,-arr[i])
return [-x for x in hp]