【问题标题】:stuck in recursion- find the lowest differnce陷入递归 - 找到最低的差异
【发布时间】:2017-12-05 08:28:00
【问题描述】:

我做了以下练习: 给定一个整数数组,从数组中递归返回两组不同数字之间的最小绝对差。 例如:如果您有以下数组:{5,4,2},则最低差为 1,因为如果将其分成两组:{5}, {4,2},您将得到:Math.abs(5-6 )=1。 另一个例子:如果你有以下数组:{4,3,2,1} 最低差是 0,因为如果你把它分成两组:{4,1}, {3,2} 你会得到:Math.abs (5-5)=0。 这只能是递归的,您可以创建任意数量的方法。 方法签名是: 公共静态 int minDiff(int[] arr)

我得到的是这个:

public static int minDiff(int[] arr){
    return minDiff(arr,0,0,0,arr[0]);
}
private static int minDiff(int[] arr,int index,int groupa, int groupb, int diff){
    if(index>=arr.length || arr.length-1-index<0 || (index==arr.length-1-index) ) return diff;
    int dif1=minDiff(arr,index+1,groupa+arr[index], groupb, diff);
    int dif2=minDiff(arr,index+1,groupa, groupb+arr[index], diff);
    if(Math.abs(dif1-dif2)<diff){
        diff=Math.abs(dif1-dif2);
    }
    return diff;

}

请指教

【问题讨论】:

  • 还有什么问题?
  • 我做错了什么......
  • 会发生什么,您预计会发生什么?
  • 你必须把整个数组分成两组吗?例如 {5,6,10, 14} 可以得出 (5-6) = 1。此外,数字是否必须彼此相邻才能被视为一个组? {5,10,6} 能否产生 {5+6} 和 {10} 使 (11-10) = 1?
  • @shockawave123 不,它们不必相邻,但您必须使用数组中的所有数字,因此数组中的每个数字都必须用于计算并且在某个组中只有一次(不能同时在其中)

标签: java recursion


【解决方案1】:

看看这个sn-p

public static void main(String[] args)
{
    System.out.println(minDiff(new int[] { 5, 2, 4 })); // 1
    System.out.println(minDiff(new int[] { 5, 4, 2 })); // 1
    System.out.println(minDiff(new int[] { 1, 2, 7, 17, 6 })); // 1
    System.out.println(minDiff(new int[] { 4, 3, 2, 1 })); // 0

}

public static int minDiff(int[] arr)
{
    return minDiff(arr, 0, 0, 0);
}

private static int minDiff(int[] arr, int sumGroupA, int sumGroupB, int i)
{
    if (i == arr.length) // in case we are out of boundaries return the absolute value between the two groups
        return Math.abs(sumGroupA - sumGroupB);

    int r1 = minDiff(arr, sumGroupA + arr[i], sumGroupB, i + 1); // add to group 1
    int r2 = minDiff(arr, sumGroupA, sumGroupB + arr[i], i + 1); // add to group 2 instead

    return Math.min(r1, r2);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 2018-06-22
    • 2021-09-06
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多