输入整数数组 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]
——————————
解题思路:使用堆进行排序,选择最小的k个数进行返回。
Python代码:
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
# Python的堆是最小堆
heapify(arr)
ans = []
for i in range(k):
ans.append(heappop(arr))
return ans
class Solution {
public:
vector<int> getLeastNumbers(vector<int>& arr, int k) {
vector<int> ans;
if(k==0)
return ans;
# C++中的优先队列是最大堆
priority_queue<int> queue;
# 将前k个数放在堆中
for(int i=0;i<k;++i)
{
queue.push(arr[i]);
}
# 对后面的数进行遍历,如果当前数小于最大堆堆顶的数,则对堆进行排序
for(int i=k;i<arr.size();++i)
{
if(queue.top()>arr[i])
{
queue.pop();
queue.push(arr[i]);
}
}
for(int i=0;i<k;++i)
{
ans.push_back(queue.top());
queue.pop();
}
return ans;
}
};