【Leetcode】面试题40. 最小的k个数(每日一题)
题目链接:最小的k个数
题意:输入整数数组 arr
,找出其中最小的 k
个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
题解:感觉应该是第二次做了。。最简单的想法就是,sort排序。
但是加了一个堆的做法,但是不是用手写堆,用的优先队列。
(然而我堆跑的比sort慢。。)
代码:
class Solution { public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int> ans; if(k == 0) return ans; sort(arr.begin(),arr.end()); for(int i = 0;i < k;i++){ ans.push_back(arr[i]); } return ans; } }; OR class Solution { public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int> ans; if(k == 0) return ans; priority_queue<int,vector<int>,less<int>> q; for(int i = 0;i < arr.size();i++){ q.push(arr[i]); if(q.size() > k) q.pop(); } for(int i = 0 ;i < k;i++){ ans.push_back(q.top()); q.pop(); } return ans; } };