这一题是寻找最大数和最小数的扩展问题,采用了与解法相同的分治思想,每次都将数组分成2个2个一组,找出其中的最大值,保存子数组之间的最大数和次大数,比较完整个数组之后,次大数即为数组的次大数。具体实现如下所示:
public class FindTheSecond{ int first,second; public int find(int [] a,int start,int end){ int mid = (start+end)/2; if(end-start>1){ int m=find(a,start,mid); int n=find(a,mid+1,end); if(m>n){ if(m>first){ first = m; } if(n>second){ second = n; } return m; }else{ if(n>first){ first = n; } if(m>second){ second = m; } return n; } }else{ if(a[start]>a[end]){ return a[start]; }else return a[end]; } } public static void main(String [] args){ int a[] = {5,6,8,3,7,9,12,31,65,21}; FindTheSecond ftc = new FindTheSecond(); ftc.find(a,0,9); System.out.println("second num is :"+ftc.second); } }