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