最大的k个数

来源:互联网 发布:十四阿哥和四阿哥知乎 编辑:程序博客网 时间:2024/05/14 19:43

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
思路1:暴力求解法:全排序,输出前k个

class Solution {public:    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {        vector<int> res;        if(input.empty() || k > input.size())            return res;        sort(input.begin(),input.end());        for(int i = 0; i < k; i++){            res.push_back(input[i]);        }        return res;    }};
思路2:最大堆
class Solution {public:    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {        int len = input.size();        vector<int> res;        if(len <= 0 || len < k || k<=0)            return  res;        for(int i = 0; i < k; i++)            res.push_back(input[i]);// 将前k个数保存到res中,然后开始调整        make_heap(res.begin(), res.end());//建立初始堆        for(int i = k; i < len; i++){            if(input[i] < res[0]){                pop_heap(res.begin(),res.end()); //从堆中删除数据                res.pop_back(); //剔除原来最大的值                res.push_back(input[i]); //压入比原来最大值小的值                push_heap(res.begin(),res.end()); //向堆中添加数据            }        }        //使其从小到大输出        sort_heap(res.begin(),res.end());        return res;    }};














原创粉丝点击