首页 > 代码库 > 29、剑指offer--最小的K个数
29、剑指offer--最小的K个数
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
解题思路:使用multiset存储k个最小值
1)先存入k个值
2)用multiset中的最大值和当前访问数组元素比较,若小于则把该值从multiset中移除,数组元素插入
3)遍历multiset将k个值存入vector中
注意事项:边界条件的判断,数组为空,k小于1,以及k大于数组元素数目
注意事项:边界条件的判断,数组为空,k小于1,以及k大于数组元素数目
1 class Solution { 2 public: 3 vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { 4 vector<int> result; 5 if(input.empty() || k<1 || input.size()<k) 6 return result; 7 multiset<int> insert_set; 8 9 set<int>::iterator it; //定义前向迭代器 10 multiset<int>::reverse_iterator rit; //定义反向迭代器 11 for(int i=0;i<input.size();i++) 12 { 13 14 if(i<k) 15 { 16 insert_set.insert(input[i]); 17 } 18 19 else 20 { 21 rit = insert_set.rbegin(); 22 if(input[i] < *rit) 23 { 24 25 insert_set.erase(*rit); 26 insert_set.insert(input[i]); 27 } 28 } 29 } 30 31 32 for(it = insert_set.begin(); it != insert_set.end(); it++) 33 { 34 result.push_back(*it); 35 } 36 return result; 37 } 38 };
29、剑指offer--最小的K个数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。