【编程之美】寻找数组中的最大值和最小值
2015-08-25 09:06
288 查看
问题:对于一个由N个整数组成的数组,需要比较多少次才能把最大值和最小值的数找出来呢?
解法1:把第一个数先看成最大值,最小值,然后从第一个数起往后开始遍历每一个数,如果比当前最大值大,代替最大值。同样,如果比当前最小值还小,代替当前最小值。比较次数2*N次。
解法2:采用分治法,分前后各一半而治,在N个数中求最小值Min和Max,只需要分别求出前后N/2个数的Min和Max,然后比较较小的Min,和较大的Max即可。该算法的比较次数为1.5N-2次,对于分治法,总的比较次数仍然没减少。
扩展:如果需要找出N个数组中第二大数,需要比较多少次?
先把第一个数作为最大值,从第二个数开始遍历,如果当前最大值小于A[i],就把当前最大值作为第二大,A[i]作为当前最大值。否则,再比较当前第二大值是否比A[i]小,如果比A[i]小,A[i]才是第二大值。该算法的时间复杂度为O(N)。
解法1:把第一个数先看成最大值,最小值,然后从第一个数起往后开始遍历每一个数,如果比当前最大值大,代替最大值。同样,如果比当前最小值还小,代替当前最小值。比较次数2*N次。
解法2:采用分治法,分前后各一半而治,在N个数中求最小值Min和Max,只需要分别求出前后N/2个数的Min和Max,然后比较较小的Min,和较大的Max即可。该算法的比较次数为1.5N-2次,对于分治法,总的比较次数仍然没减少。
扩展:如果需要找出N个数组中第二大数,需要比较多少次?
先把第一个数作为最大值,从第二个数开始遍历,如果当前最大值小于A[i],就把当前最大值作为第二大,A[i]作为当前最大值。否则,再比较当前第二大值是否比A[i]小,如果比A[i]小,A[i]才是第二大值。该算法的时间复杂度为O(N)。
相关文章推荐
- 直接topbar奔溃,出现 at java.lang.reflect.Constructor.constructNative(Native Method)
- maven在eclipse建立工程,运行出现Server IPC version 9 cannot communicate with client version 4错误
- 快速排序
- 玩转Eclipse — 自动代码生成的Java Code Template
- java中实现四则运算代码
- java IO 学习笔记之FIle
- Java开发中学用eclipse code templates
- C语言中一些将字符串转换为数字的函数小结
- 对比分析C语言中的gcvt()和ecvt()以及fcvt()函数
- leetcode: (263) Ugly Number
- Spark Streaming编程指南
- 面向接口编程详解(一)——思想基础
- Python连接mysql数据库及python使用mysqldb连接数据库教程
- 面向接口编程详解(一)——思想基础
- JSON 转javabean 利器
- 选择编程开发书籍的反思
- C++中的explicit关键字
- vbox挂载共享文件夹
- Python正则表达式+自创口诀
- java-内部类说明