内容全部来自编程之法:面试和算法心得一书,实现是自己写的使用的是java

题目描述

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

分析与解法

解法一

要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。

至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:O(n * log n)+O(k)=O(n * log n)。

/*

* 快速排序法 O(N*logN)

* 最简单直接的方法就是快速排序+返回前k个数字

*/

public static int[] solution1(int[] arr, int k)

{

Arrays.sort(arr);

int[] result = new int[k];

for (int i = 0; i < k; i++)

{

result[i] = arr[i];

}

return result;

}

解法二

咱们再进一步想想,题目没有要求最小的k个数有序,也没要求最后n-k个数有序。既然如此,就没有必要对所有元素进行排序。这时,咱们想到了用选择或交换排序,即:

1、遍历n个数,把最先遍历到的k个数存入到大小为k的数组中,假设它们即是最小的k个

c语言从4个整数中找最小的数,编程之法:面试和算法心得(寻找最小的k个数)...相关推荐

  1. 【C语言练习】四个整数中找出最大的一个

    <啊哈C语言>这本书上的练习题: 从键盘任意读入四个整数,让计算机从中找出最大的一个. #include <stdio.h> #include <stdlib.h> ...

  2. 如何在10亿个整数中找出前1000个最大的数?

    作者:vincent-duan,专注 Java,沉迷开源,架构师社区合伙人! 面试题目:如何在10亿个整数中找出前1000个最大的数. 我们知道排序算法有很多: 冒泡算法:通过两层for循环,外层第一 ...

  3. 2.5亿个整数中找出不重复的整数

    问题描述:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数. 思路:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共 ...

  4. 如何在10亿个整数中找出前1000个最大的数(TopN算法)

    面试题目:如何在10亿个整数中找出前1000个最大的数. 我们知道排序算法有很多: 冒泡算法:通过两层for循环,外层第一次循环找到数组中最大的元素放置在倒数第一个位置,第二次循环找到第二大的元素放置 ...

  5. 一道笔试题:从1亿个整数中找出最大的一万个

    今天看到一篇赖永浩大牛的博客,由一道笔试题目谈算法优化.http://blog.csdn.net/lanphaday/archive/2008/12/19/3547776.aspx. 题目原题是从10 ...

  6. 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数

    方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受.然后扫描这2.5亿个整数 ...

  7. 找字符串中最长单词C语言,C语言 在已知字符串中找最长单词

    编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词. 比如:"ni hao world",最长单词是5个字母 这个题目其实不难,但是很多初学者会没 ...

  8. C语言 计算一串字符中出现的数字字符数

    getchar 函数的功能是读取字符串并将其返回.输入结束或读取过程中发生错误时,就会返回EOF值. #include <stdio.h>int main(void){int i, str ...

  9. jtable如何从表格中定位_Java Swing组件编程之JTable表格用法实例详解

    本文实例讲述了Java Swing组件编程之JTable表格用法.分享给大家供大家参考,具体如下: 表格是GUI编程中使用较多,但也是最麻烦的一个控件之一.表格是用来显示二维数据,提供编辑,选择等功能 ...

最新文章

  1. codevs 1203 判断浮点数是否相等
  2. 为什么说21世纪是一场ABC的革命?
  3. 学习ASP.NET Core Razor 编程系列九——增加查询功能
  4. 解决hash冲突的常用方法
  5. Eclipse集成Groovy插件
  6. Emacs学用快捷键
  7. [AtCoder Grand Contest 048] D - Pocky Game(区间dp + 博弈)
  8. Cache技术―OSCache
  9. idea解决maven pom依赖下载失败
  10. Ubuntu 答疑:Ubuntu 添加和删除用户具体步骤及进程被占用的解决方式
  11. 【AI视野·今日CV 计算机视觉论文速览 第238期】Fri, 1 Oct 2021
  12. 3dvary灯光材质为什么不亮_关机后电脑灯光闪瞎狗眼?在这里关闭它
  13. arduino 蓝牙示例_,arduino 蓝牙例子,
  14. Lambda 的优势
  15. maven学习(3)
  16. 讲解开源项目:用 Python 生成有“灵魂”的二维码
  17. linux -- CW8.8 编译 提示缺少libstdc++.so.5的error
  18. 大数据学长面试之华为面试题
  19. EXCEL——提取身份证中的出生年月日
  20. vue : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.

热门文章

  1. 除夕夜的电子微传单怎么轻松制作,求分享
  2. 逆向工程中常用软件分析工具
  3. Fmoc-Lys (biotin-PEG4)-OH,1334172-64-3生物素标记的、基于PEG的PROTAC连接物
  4. 一次windows server 2003系统修复过程
  5. 【HTTP】HTTP报文首部
  6. 如何:对代理使用 IP 切换
  7. 开发者模式的微信公众号菜单链接其他开发者的小程序
  8. 使用dom4j解析xml 遇到困难
  9. 笔记本电脑 音频输出 杂音 问题的解决方案
  10. 外壳IK碰撞冲击测试