剑指offer:最小k个数

Posted billowj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:最小k个数相关的知识,希望对你有一定的参考价值。

题目描述

输入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个数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--40最小的k个数

剑指offer---最小的K个数

剑指offer:最小k个数

剑指 Offer 40. 最小的k个数

最小的K个数-剑指Offer

剑指 Offer 40. 最小的k个数