在无序数组中寻找最小的k个数
来源:互联网 发布:真视通北京网络 编辑:程序博客网 时间:2024/06/05 03:15
在无序数组中寻找最小的k个数
/*在数组中寻找最小的k个数例如,输入:4,5,1,6,2,7,3,8 这8个数字,输出最小的4个数是:1,2,3,4*/#include<iostream>#include<vector>#include<algorithm>#include<numeric>#include<set>#include<functional>using namespace std;class Solution{public:void GetLeastnumbers(const vector<int> &data, multiset<int, greater<int>> &leastNumbers, int k){leastNumbers.clear();if(k<1 || data.size()<k)return;vector<int> ::const_iterator iter=data.cbegin();for( ; iter!=data.cend(); ++iter){if(leastNumbers.size()<k)leastNumbers.insert(*iter);else{multiset<int, greater<int>>::iterator interGreatest=leastNumbers.begin();if(*iter < *(leastNumbers.begin())){leastNumbers.erase(interGreatest);leastNumbers.insert(*iter);}}}}};int main(void){int input[]={4,5,1,6,2,7,3,8};vector<int> data(begin(input),end(input));int k=0;cin>>k;multiset<int, greater<int>> leastNumbers;//辅助内存空间class Solution object;object.GetLeastnumbers(data,leastNumbers,k);for(auto mem:leastNumbers)cout<<mem<<",";cout<<endl;system("pause");return 0;}
/*在数组中寻找最小的k个数例如,输入:4,5,1,6,2,7,3,8 这8个数字,输出最小的4个数是:1,2,3,4*/#include<iostream>#include<vector>#include<algorithm>#include<numeric>using namespace std;class Solution{public:void GetLeastnumbers(int input[], int n, vector<int> &res,int k){if(input==nullptr || k>n || n<=0 || k<=0)return;int start=0;int end=n-1;int index=partion(input,n,start,end);while(index!=k-1){if(index>k-1){end=index-1;index=partion(input,n,start,end);}else{start=index+1;index=partion(input,n,start,end);}}for(int i=0; i<k; ++i)res[i]=input[i];}public:int partion(int input[], int n, int start, int end){if(input==nullptr || n<1)return -1;int i=start;int j=end;while(i<j){while(i<j && input[i]<=input[j])--j;if(i<j){swap(input[i],input[j]);++i;}while(i<j && input[i]<=input[j])++i;if(i<j){swap(input[i],input[j]);--j;}}return i;}};int main(void){int input[]={4,5,1,6,2,7,3,8};int n=sizeof(input)/sizeof(input[0]);int k=0;cin>>k;vector<int> res(k);class Solution object;object.GetLeastnumbers(input,n,res,k);for(auto mem:res)cout<<mem<<",";cout<<endl;system("pause");return 0;}
阅读全文
0 0
- 在无序数组中寻找最小的k个数
- 无序数组中最小的k个数
- 无序数组中最小的K个数
- 无序数组中最小的k个数
- 无序数组中最小的k个数
- 找出无序数组中最小的前k个数
- 找出无序数组中最小的前k个数
- 求无序数组中最小的k个数
- 找到无序数组中最小的K个数
- 无序数组最小的k个数
- 无序数组中的最小的k个数
- 无序数组最小的K个数
- 寻找数组中最小的k个数 "最小堆方法"
- 在无序数组中取最大的K个数
- 无序序列中O(n)时间复杂度寻找最小(最大)的K个数
- 算法杂谈--寻找数组中最小的k个数
- 无序数组中找到第K小的数(或者找到最小的K个数)
- 数组与矩阵---找到无序数组中最小的k个数
- 火车头采集退出
- C++拷贝构造函数详解
- Java线程---休眠问题来看并发执行
- JavaScript apply()与call()的用法及区别
- Linux救援模式
- 在无序数组中寻找最小的k个数
- 什么是AJAX-
- python 中 append 与 extend
- C#冒泡排序&&选择排序&&快速排序
- Lunix平台下c/c++内存泄漏与内存溢出的解决方法
- 2017暑期ACM俱乐部个人训练赛第5场 G.礼物 (矩阵快速幂)
- spring boot(15)-异常处理
- NYOJ【108】士兵杀敌(一)【前缀和】&&【查询】
- Maven学习 --- <parent>