java 二分迭代,求数组中两个最大值

这个问题除了分析思路以外,最主要需要注意的事 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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值