k个最小的数
Posted czy4869
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k个最小的数相关的知识,希望对你有一定的参考价值。
输入n个整数,输出k个最小的数。例如输入4,5,1,6,2,7,3,8这8个数,则最小的4个数字是1,2,3,4。利用堆排序
(1)遍历数组,将前k个数插入到堆中,使用multiset来实现堆
(2)继续从输入数组中读入元素,作为待插入的整数,并将它与堆中的最大值进行比较,若待插入的值比这个最大值小,则用它替换最大值,否则抛弃这个数,继续读取下一个数.动态的维护堆中的数都是最小的,最后输出堆即可.
multiset和set的区别是multiset允许元素重复.
如果本题变为求k个最大的数,则将最大堆变为最小堆,并且继续从输入数组中读入元素,作为待插入的整数,将它与堆中的最小值进行比较,若待插入的值比这个最小值大,则用它替换最小值,否则抛弃这数,继续读取下一个数,动态的维护堆中的数都是最大的,最后输出堆即可.
vector<int> GetLeastNumber(vector<int> input,int k) { vector<int> result; int lenth=input.size(); if(input.empty()||lenth<k||k<=0) { return result; } multiset<int,greater<int>> leastnumber;
multiset<int,greater<int>> ::iterator itergreater;
vector<int> ::iterator iter=input.begin(); for(;iter!=input.end();++iter) { if(leastnumber.size()<k) { leastnumber.insert(*iter); } else { itergreater=leastnumber.begin(); if(*iter<*itergreater) { leastnumber.erase(itergreater); leastnumber.insert(*iter); } } } for(iter=leastnumber.begin();iter!=leastnumber.end();++iter) { result.push_back(*iter); } return result; }
以上是关于k个最小的数的主要内容,如果未能解决你的问题,请参考以下文章
用JAVA语言编译:数组中包含n个整数,从其中找出k个最小的数,写出你能想到的最快的方法!!!
2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个? 腾讯音乐2022校园招聘。
剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数