标签:tag 元素 tor i++ vector 编辑 找不到 enum code
Markdown在线编辑器 - www.MdEditor.com
存着最小k个数的数组,内部有序,遍历所有元素,和辅助数组中最大的比,只要小就替换辅助数组中的最大元素,然后再排序
// 使用辅助数组来实现vector<int> FuZhu(vector<int> a,int k) { vector<int> result; if(a.size() < k || k == 0) return result; if (a.empty()) { return result; } result.push_back(a[0]); for (int i = 1; i < a.size(); i++) { if (result.size() == k) { sort(result.begin(), result.end()); if (a[i] < *(result.end()-1)) { result.pop_back(); result.push_back(a[i]); } } else { result.push_back(a[i]); } } //时间复杂度 return result;} vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { return FuZhu(input, k); }快速排序可以保证k左边的都小,右边都大,当基准元素位置==k个数时,输出前k个即可。
不用排两边,只要照着k在的那一侧即可
intOnce(vector<int>&a,int start,intend){int mark = start;int tmp =0;for(int i = start +1; i <=end; i++){if(a[start]> a[i]){ mark++; tmp = a[i]; a[i]= a[mark]; a[mark]= tmp;}} tmp = a[mark]; a[mark]= a[start]; a[start]= tmp;return mark;}void kuaisu(vector<int>&a,int k,int start,intend){int i =Once(a, start,end);if(k == i){return;}// 这次分完位置在i,和k去比较if(i > k){ kuaisu(a, k,0, i -1);}else{ kuaisu(a, k, i +1,end);}}// 借鉴快速排序实现 vector<int>GetLeastNumbers_Solution(vector<int> input,int k){//找到k的位置就行 vector<int> result;if(k > input.size())return result;// 找不到k位置if(input.empty()){return result;}// 让我们开始快速排序 kuaisu(input, k,0, input.size()-1);// 把前k个数存入resultfor(int i =0; i < k; i++){ result.push_back(input[i]);}return result;}标签:tag 元素 tor i++ vector 编辑 找不到 enum code
原文地址:https://www.cnblogs.com/linxuesong/p/12173291.html