[Baidu面试题]题目1:输入n个整数,输出其中最小的k个。
来源:互联网 发布:windows7优化 编辑:程序博客网 时间:2024/05/16 15:42
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7,8,9这9个数字,则最小的3个数字为1,2,3。
分析:这道题最简单最直接的思路莫过于把输入的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
- [Baidu面试题]题目1:输入n个整数,输出其中最小的k个。
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个
- 输入n个整数,输出其中最小的k个。
- 题目:输入n个整数,输出其中最小的k个。
- 华为OJ题目(二十一):输入n个整数,输出其中最小的k个
- 华为OJ试题:输入n个整数,输出其中最小的k个
- 华为OJ平台试题 —— 数组:输入n个整数,输出其中最小的k个
- 程序员面试100题(算法)之输入n个整数,输出其中最小的k个
- 华为(9)输入n个整数,输出其中最小的k个
- 输入 n 个整数,输出其中最小的 k 个—7种方法实现
- 自己设计的atoi函数
- Android2.2中drawable(hdpi,ldpi,mdpi)、android :gravity区别
- Lucene in Action 中文版
- 有理想的程序员必须知道的15件事
- spoj 694 Distinct Substrings 705 New Distinct Substrings
- [Baidu面试题]题目1:输入n个整数,输出其中最小的k个。
- HDU 1258 sum it up
- 终端中执行命令时提示权限不够的解决方法
- 在VS2008里开发C项目的步骤
- C#关于在lucene下的中文切词
- MySQL数据库管理常用命令
- ubuntu阻止软件包升级(指定的软件包不升级)
- 软件开发非著名高手修炼法:ET-TCARBSSW
- 一步一步教你配置vnc