700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 29 剑指offer--最小的K个数

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

时间:2023-12-20 10:13:12

相关推荐

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大于数组元素数目

1 class Solution { 2 public: 3vector<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 else20 {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 };

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。