【发布时间】: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 不,它们不必相邻,但您必须使用数组中的所有数字,因此数组中的每个数字都必须用于计算并且在某个组中只有一次(不能同时在其中)