编程之美--寻找数组中的最大值和最小值
2014-08-18 11:52
267 查看
1、题目:对于一个由N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来?
例如,数组{5,6,8,3,7,9},其中Max=9, Min=3.
解法一:
扫描一遍数组,分别找出最大和最小值,需要比较2N次。
解法二:
一般情况下,最大和最小的数不会是同一个,首先按顺序将数组中相邻的两个数分在同一组(只是概念上的分组),接着比较同一组中奇数位数字和偶数位数字,将较大的数放在偶数位上,将较小的数放在奇数位上。经过N/2次比较后,较大的数放到了偶数位上,较小的数放到了奇数位上。
解法三:
分治法,分别求出前后N/2个数的Min和Max,然后取较小的Min、Max即可。(只需较大的数和较大的数比较,较小的数和较小的数比较。两次就可以了)
例如,数组{5,6,8,3,7,9},其中Max=9, Min=3.
解法一:
扫描一遍数组,分别找出最大和最小值,需要比较2N次。
解法二:
一般情况下,最大和最小的数不会是同一个,首先按顺序将数组中相邻的两个数分在同一组(只是概念上的分组),接着比较同一组中奇数位数字和偶数位数字,将较大的数放在偶数位上,将较小的数放在奇数位上。经过N/2次比较后,较大的数放到了偶数位上,较小的数放到了奇数位上。
解法三:
分治法,分别求出前后N/2个数的Min和Max,然后取较小的Min、Max即可。(只需较大的数和较大的数比较,较小的数和较小的数比较。两次就可以了)
(max, min)Search(arr, b, e) { if(e-b <= 1) { if(arr[b] < arr[e]) return (arr[e], arr[b]); else return (arr[b], arr[e]); } (maxL, minL) = Search(arr, b, b+(e-b)/2); (maxR, minR) = Search(arr, b+(e-b)/2+1, e); if(maxL > maxR) maxV= maxL; else maxV= maxR; if(minL < minR) minV= minL; else minV= minR; return (maxV, minV); }
相关文章推荐
- 【编程之美】寻找数组中的最大值和最小值
- 编程之美 set 5 寻找数组中最大值和最小值
- 编程之美 寻找数组中的最大值和最小值
- 编程之美 - 寻找数组中的最大值和最小值
- 编程之美_009寻找数组中的最大值和最小值
- 编程之美_2.10_寻找数组中的最大值和最小值
- 编程之美 -- 寻找数组中的最大值和最小值
- 编程之美----寻找数组中的最大值和最小值
- 编程之美-寻找数组中的最大值和最小值方法整理
- 读书笔记之编程之美 - 2.10 寻找数组中的最大值和最小值
- 【编程之美】读书笔记:寻找数组中的最大值和最小值
- [编程之美] PSet2.10 寻找数组中的最大值和最小值
- 编程之美3:寻找数组中的最大值和最小值以及最大值和次大值
- 编程之美-2.10-寻找数组中的最大值和最小值
- 编程之美 寻找数组中的最大值和最小值
- 寻找在数组中一个元素是不是该行最小,该列最大的元素
- 寻找数组中的最大值和最小值
- 寻找数组中的最大值和最小值
- 寻找数组中的最大值和最小值
- 编程之美——寻找数组中的最大值和最小值