找出一个整形数组中第二大的数字
如何在时间复杂度为O(n)内找出数组中第二大的数字?
通过设置两个变量,一个保存最大值,一个保存第二大值,通过在找最大值的过程中,原来的最大值逐渐变为第二大值。一种实现代码如下(Java版):
1 /** 2 * 在时间复杂度为O(n)内找出数组的第二大的数字 3 * @author JiaJoa 4 * 5 */ 6 public class Algorithm_GetSecondMax { 7 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 int[] data = {3,2,5,1,6,4,7}; 11 System.out.println(Algorithm_GetSecondMax.getSecondMax(data)); 12 } 13 14 //通过设置两个变量,一个保存最大值,一个保存第二大值, 15 //通过在找最大值的过程中,原来的最大值逐渐变为第二大值, 16 public static int getSecondMax(int[] data){ 17 int first_max = data[0]; 18 int second_max = Integer.MIN_VALUE; 19 for(int i=1;i<data.length;i++){ 20 if(data[i]>first_max){ 21 second_max = first_max; 22 first_max = data[i]; 23 }else{ 24 if(data[i]>second_max) 25 second_max = data[i]; 26 } 27 } 28 return second_max; 29 } 30 }