问答题 如何找出数组中第二大的数
【正确答案】
【答案解析】如果仅仅只考虑实现功能,而不考虑时间效率,可以先通过排序算法将数组进行排序,然后根据数组下标来访问数组中第二大的数,最快的排序算法一般为快速排序算法,但是其时间复杂度仍为O(nlogn),根据下标访问需要遍历一遍数组,时间复杂度为O(n),所以总的时间复杂度为O(nlogn)。
有没有更好的方法能降低时间复杂度了?答案是有,可以只通过一遍扫描数组即可找出数组中第二大的数,即通过设置两个变量来进行判断。先定义两个变量:一个变量用来存储数组的最大数,初始值为数组首元素,另一个变量用来存储数组元素的第二大数,初始值为最小负整数,然后遍历数组元素,如果数组元素的值比最大数变量的值大,则将第二大变量的值更新为最大数变量的值,最大数变量的值更新为该数组元素的值,若数组元素的值比最大数的值小,则判断该数组元素的值是否比第二大数的值大;若数组元素的值比最大数的值大,则更新第二大数的值为该数组元素的值。
示例如下:
public class SecondMax{
public static int FindSecMax(int data[]){
int count=data.length;
im maxnumber=data[0];
int sec_max=Integer.MIN_VALUE;
for(int i=1; i<count; i++){
if(data[i]>maxnumber){
sec_max=maxnumber;
maxnumber=data[i];
}
else{
if(data[i]>sec_max)
sec_max=data[i];
}
}
return sec_max;
}
public static void main(String[]args){
int[]array={7, 3, 19, 40, 4, 7, 1};
System.out.println(FindSecMax(array));
}
}