程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 數組最值-java分治思想求數組最大值最小值

數組最值-java分治思想求數組最大值最小值

編輯:編程解疑
java分治思想求數組最大值最小值
 public class getMaxMin {
    /**
     * 分治思想:先分別求出前半部分和後半部分數組的最大值和最小值,
     * 兩部分中的最大值和最小值分別比較求出整個數組的最大值和最小值  
     * 比較次數為3*N/2-2次
     * @param arr
     * @param start
     * @param end
     * @param Max
     * @param Min
     */
    public static void findMaxMin(int[] arr,int start,int end,int Max,int Min){
        if(end - start <= 1){
            if(arr[start] > arr[end]){
                Max = arr[start];
                Min = arr[end];
            } else{
                Max = arr[end];
                Min = arr[start];
            }
            return;
        }
        int leftMax = 0;
        int leftMin = 0;
        int rightMax = 0;
        int rightMin = 0;
        findMaxMin(arr,start,(start + end) / 2,leftMax,leftMin);
        findMaxMin(arr,(start + end) / 2 + 1,end,rightMax,rightMin);

        Max = leftMax > rightMax ? leftMax : rightMax;
        Min = leftMin < rightMin ? leftMin : rightMin;
    }
    public static void main(String[] args) {
        int max = 0;
        int min = 0;
        int arr[] = {7,3,19,48,4,17,-12,10};
        findMaxMin(arr,0,arr.length - 1,max,min);
        System.out.println("max = " + max);
        System.out.println("min = " + min);
    }
}

為什麼得不到結果,哪裡錯了?

最佳回答:


 java中int這些值作為參數,改變形參(在函數中賦值)不會作用到實參(調用者定義的變量)。
你需要定義一個類
class MyRef
{
public int max;
public int min;
}

public static void findMaxMin(int[] arr,int start,int end,int Max,int Min)
->
public static void findMaxMin(int[] arr,int start,int end,MyRef m)

MyRef m1 = new MyRef();
m1.max = leftMax;
m1.min = leftMin;
findMaxMin(arr,start,(start + end) / 2,m1);
MyRef m2 = new MyRef();
m2.max = rightMax;
m2.min = rightMin;
findMaxMin(arr,(start + end) / 2 + 1,end,m2);
...

Max = leftMax > rightMax ? leftMax : rightMax;
Min = leftMin < rightMin ? leftMin : rightMin;
->
m.Max = m1.Max > m2.Max ? m1.Max : m2.Max;
m.Min = m1.Min < m2.Min ? m1.Min : m2.Min;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved