##LeetCode 剑指 Offer 40. 最小的k个数
输入整数数组 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]
Code
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
result=[[0] for i in range(len(arr)+1)]
if k==0:
return []
result=self.res(0,len(arr),arr,k)
return result
def res(self,start:int,end: int,arr: List[int],k: int)->List[int]:#分治
if (end-start)<=k:
return arr[start:end]
mid=(start+end)//2
left=self.res(start,mid,arr,k)#处理左边
right=self.res(mid,end,arr,k)#处理右边
left.extend(right)#合并
left.sort()#从大到小排列
return left[:k]
想法
处理左边的 k 个最小值,再处理右边的 k 个最小值。最后合并取 k 个最小值。