码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer:最小k个数

时间:2020-04-19 12:51:54      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:int   least   etl   输入   back   item   排序   begin   push   

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

 

代码:

1.普通人的大顶堆解法

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        if (k == 0 || k > input.size()) return {};
        priority_queue<int> p;
        vector<int> ans;
        for(int i = 0; i < k; i++){
            p.push(input[i]);
        }
        for(int i = k; i < input.size(); i++){
            if(input[i] < p.top()){
                p.pop();
                p.push(input[i]);
            }
        }
        for(int i = 0; i < k; i++){
            ans.push_back(p.top());
            p.pop();
        }
        return ans;
        
    }
};

 

2.

普通人懒人解法

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        if(k > input.size() || input.empty()) return {};
        vector<int> ans;
        sort(input.begin(), input.end());
        for(int i = 0; i < k; i++){
            ans.push_back(input[i]);
        }
        
        return ans;
    }
};

 

3.

冒泡排序:

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        if(k > input.size() || input.empty()) return {};
        vector<int> ans;
        for(int i = 0; i < k; i++){
            for(int j = 0; j < input.size()-i - 1; j++){
                if(input[j] < input[j+1]){
                    int tmp = input[j];
                    input[j] = input[j+1];
                    input[j+1] = tmp;
                }
            }
            ans.push_back(input[input.size()-i-1]);
        }
        
        return ans;
    }
};

 

剑指offer:最小k个数

标签:int   least   etl   输入   back   item   排序   begin   push   

原文地址:https://www.cnblogs.com/BillowJ/p/12730962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!