[Baidu面试题]题目1:输入n个整数,输出其中最小的k个。

来源:互联网 发布:windows7优化 编辑:程序博客网 时间:2024/05/16 15:42

题目:输入n个整数,输出其中最小的k个。

 

例如输入1234567899个数字,则最小的3个数字为123

 

    分析:这道题最简单最直接的思路莫过于把输入的n个整数进行排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)

    我们试着寻找更快的解决思路。我们可以开辟一个长度为k的数组。每次从输入的n个整数中读入一个数。如果数组中已经插入的元素少于k个,则将读入的整数直接放到数组中。否则就是长度为k的数组已经满了,不能再往数组里插入元素,只能进行替换了。

    如果读入的这个整数比数组中已有k个整数的最大值要小,则用读入的这个整数替换这个最大值;如果读入的整数比数组中已有k个整数的最大值还要大,则读入的这个整数不可能是最小的k个整数之一,抛弃这个整数。这种思路相当于只要排序k个整数,因此时间复杂可以降到O(n+nlogk)。通常情况下k要远小于n,所以这种办法要优于前面的思路。

    现在,我们给出如下的C代码实现:

    个人力争每个题目都有C&C++的两个版本,稍后续上C++版本...

声明:如有转载,请说明出处,谢谢!

备注:个人水平有限,诚挚欢迎各位专家指正。

邮箱:zzs85aa@163.com

原创粉丝点击