编程之美2.10寻找数组中的最大值和最小值扩展问题Java版

可以用分治的思想,每次返回最大的前两个值,最后比较返回的四个值,从中找出第二大的
 public static void main(String[] args) {
     
        //扩展问题 用分治的思想
        int[] num2 = searchSecondMax2(arry,0,arry.length-1);
        System.out.println("数组中第二大的数:"+num2[0]);
        
    }

 private static int[] searchSecondMax2(int[] arry, int begin, int end) {
        int[] result = new int[2];
        if(end-begin <=1){//result中由小到大排
            if(arry[begin]<arry[end]){
                result[0]=arry[begin];
                result[1]= arry[end];
                return result;
            }else{
                result[0] = arry[end];
                result[1] = arry[begin];
                return result;
            }
        }
        int mid = (begin+end)/2;
        int[] result_left = searchArrayMaxMin(arry,begin,mid);
        int[] result_right =searchArrayMaxMin(arry,mid+1,end);
        if(result_left[1]>result_right[1]){
            if(result_left[0]<result_right[1]){
                result[0]= result_right[1];
            }else{
                result[0]= result_left[0];
            }
        }else{
            if(result_left[1]>result_right[0]){
                result[0]= result_left[1];
            }else{
                result[0]= result_right[0];
            }
        }
        return result;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值