用分治算法同时求数组中的最值

//根据别人的最大值代码改写分治法求数组的最大值最小值
public class MaxAndMin {

     public static void main(String[] args){      

        int AR[] = { 0,3, 4, 62, 70, 23, 120, 34, 800,-1};
        int[] res=maxandminNum(AR,0,(AR.length-1));
        System.out.println("MAX: "+res[0]+",MIN: "+res[1]);
     }

     public static int[] maxandminNum(int arrary[],int left,int right)
     {
      int maxLeft,maxRight;
      int[] leftres=new int[2];//左边的最值
      int[] rightres=new int[2];//右边子模块的最值
      if(left == right)
      {
       leftres[0]=leftres[1]=rightres[0]=rightres[1]=left;//下标为0代表最大值,下标为1代表最小值
       return leftres;
      }
      leftres = maxandminNum(arrary,left,(left+right)/2);
      rightres = maxandminNum(arrary,(left+right)/2 + 1,right);
      System.out.println(leftres[0]+","+ leftres[1]+","+rightres[0]+","+rightres[1]);
      if(arrary[leftres[0]] > arrary[rightres[0]]&&arrary[leftres[1]] < arrary[rightres[1]]) ;
      if(arrary[leftres[0]] > arrary[rightres[0]]&&arrary[leftres[1]] > arrary[rightres[1]]) leftres[1]=rightres[1];
      if(arrary[leftres[0]] < arrary[rightres[0]]&&arrary[leftres[1]] > arrary[rightres[1]]) leftres=rightres;    
      if(arrary[leftres[0]] < arrary[rightres[0]]&&arrary[leftres[1]] < arrary[rightres[1]]) leftres[0]=rightres[0];
      System.out.println(leftres[0]+","+ leftres[1]+","+rightres[0]+","+rightres[1]);
      return leftres;
     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值