[面试题]用最少的比较次数找出一个数组中的最大值和次大值

题目描述

如题,且无重复元素

思路

用分治法,把数组分成2组,2组内分别用两两比较淘汰的方法找出各自的最大值(一共n-1次比较), 最后出来的2个最大值比较,较大的那个是最大值,第二大的值在较小的那个和所有跟最大值比较过的元素(一共log_2 n -1个)之间产生。只需用较小的那个 和 log_2 n -1个与最大值比较过的元素分别比较一次 (这里又需要log_2 n-1 次比较) 就行了。所以最终的比较次数为(logn+n-2)。

你可能感兴趣的:(笔试面试)