知名网站制作全包,有赞分销商城,品牌建设存在的问题及对策,凡科建站是不是关闭企业网站1. 题目
输入整数数组 arr #xff0c;找出其中最小的 k 个数。例如#xff0c;输入4、5、1、6、2、7、3、8这8个数字#xff0c;则最小的4个数字是1、2、3、4。
示例 1#xff1a;
输入#xff1a;arr [3,2,1], k 2
输出#xff1a;[1,2] 或者 [2,1]示例 2#xff…1. 题目
输入整数数组 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]限制
0 k arr.length 1000来源力扣LeetCode 链接https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 解题
类似题目LeetCode 215. 数组中的第K个最大元素快速排序
2.1 排序
class Solution {
public:vectorint getLeastNumbers(vectorint arr, int k) {sort(arr.begin(), arr.end());return vectorint (arr.begin(), arr.begin()k);}
};2.2 大顶堆
class Solution {
public:vectorint getLeastNumbers(vectorint arr, int k) {priority_queueint q;//默认最大堆for(auto a : arr){if(q.size() k)q.push(a);else{if(!q.empty() a q.top()){ //忘记写q.empty()k为0时报错q.pop();q.push(a);}}}vectorint ans;while(!q.empty()){ans.push_back(q.top());q.pop();}return ans;}
};