难度简单281
输入整数数组 arr
,找出其中最小的 k
个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1]
示例 2:
输入:arr = [0,1,2,1], k = 1 输出:[0]
# 一个容器里面放k个数,这k个数排序,第k个最大,当外面的数小于第k个数时,容器删除第k个数,加入外面的数 # python3只有最小堆,没有最大堆,故取反,最大值变成最小值
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
if k==0:
return []
heap=[-x for x in arr[:k]]
heapq.heapify(heap) #让列表具备堆特征
for i in arr[k:]: #堆顶是最小值
if -i >heap[0]:
heapreplace(heap,-i)# 弹出最小的元素,并将-i压入
return [-x for x in heap]
# 排序,取前面k位
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
if not arr:
return
def quick(arr):
if len(arr)<1:
return arr
n=len(arr)
mid=arr[0]
left=[]
right=[]
for i in range(1,n):
if arr[i]<=mid:
left.append(arr[i])
else:
right.append(arr[i])
return quick(left)+[mid]+quick(right)
s=quick(arr)
return s[:k]