这个问题除了分析思路以外,最主要需要注意的事 java 的参数传递是“值传递”;传入基本类型变量的时候无法修改实际参数的值,如果想实现 “引用” 的效果(即实际参数值发生改变,则需要传入引用类型变量)
题目:从数组 A[lo,hi) 中找出最大的两个正整数 A[x1] ,A[x2];要求元素比较的次数尽可能得少
解题思路为:把数组不断地一分为二,直到最小;在左右两个数组中,分别选取 第一个最大和第二个最大;左边的标记为 x1L 和 x2L ;右边的标记为 x1R 和 x2R ;在这四个数中再筛选出 第一大和第二大。
代码为:
public static void main(String[] args){
int[] intArr={29,5,4,6,3,7,10,2,1,11,19,13,15};
int[] res2={0,0};
max2Dich4(intArr,0,intArr.length,res2); //调用函数,传入的需要时 引用数据类型,才能 在下面打印 最大值和 次大值;否则,函数内对参数的改变只能在函数内部体现,无法传递到函数外部,也就是说 最大值和次大值打印结果为0,0
System.out.println("最大值是:"+res2[0]);
System.out.println("第二最大值是:"+res2[1]);
}
public static void max2Dich4(int[] A,int lo,int hi,int[] res){
if(lo+2==hi){ //数组中只有两个元素时
System.out.println("1");
res[0]=Math.max(A[lo], A[hi-1]);
res