编程之美-2.10-寻找数组中的最大值和最小值

1. 简述

    对于一个由N个正数组成的数组,需要比较多少次才能把最大值和最小值找出来?

2. 思路

    1) 就是遍历一遍,分别统计最大值和最小值,2*N。
    2) 每次遍历两个数字,比较一下这两个数字,大的数字更新最大值,小的数字更新最小值,一共是N/2次,每次比较3次,一共就是3*N/2次比较。

    扩展问题就是求N个元素的数组中第二大的数,需要比较的次数,以及是否可以是使用类似的分治思想降低比较次数。感觉有点像Top-2,每次先与次大的比,如果大于次大的,更新次大的,然后与最大的比,如果大于最大的,更新最大的。次数可以这样算,每个数大于最大的,小于次大的,以及介于两者之间的可能性假设相同,那么次数的期望就是1/3 * (2 + 1 + 2) = 5 / 3,要比3/2更大一些。另外,如果假设每个数大于次大的和小于次大的可能性相同,那么次数的期望就是1/2 * (2 + 1) = 3 / 2。

3. 参考

    编程之美,2.10节,寻找数组中的最大值和最小值。
    编程之美》2.10 寻找数组中的最大值和最小值

posted @ 2011-09-30 14:27  xiaodongrush  阅读(654)  评论(0编辑  收藏  举报