【编程之美】寻找数组中的最大值和最小值
问题:对于一个由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)。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。