所以我有这个问题,在数组中找到2个最小的数字,但我必须使用递归(递归部分是本练习的一部分)。 我开始考虑如何做到这一点,我试图做的“计划”是这样的,首先找到数组中最小的,然后标记我找到它的位置,然后将数组拆分为2组并搜索这两个群体的可能性从他们那里得到最低限度。
这是我到目前为止的代码:
public static int MinRecu2(int[] a) {
if (a.length == 1)
return a[0];
int min = a[0];
int min2;
int mark = 0;
// Find first min
for (int i = 1; i < a.length; i++) {
if (a[i] < min) {
min = a[i];
mark = i;
}
}
int [] help1= new int [mark+1];
int [] help2= new int [a.length-mark];
help1=Arrays.copyOfRange(a, 0, mark);
help2=Arrays.copyOfRange(a, mark+1, a.length-1);
// Find second min
min2 = Math.min(MinRecu2(help1), MinRecu2(help2));
return min;
}
我知道代码不起作用,而我试图做的“递归”很糟糕,但我是如何试图让我的思考代码
答案 0 :(得分:0)
这是解决问题的方法。
glP
此函数表示在[s,e]中的public static int[] twoSmallest(int[] arr, int s, int e) {
int[] list;
if (e - s <= 3) { // maybe 2 or 3
list = new int[e - s];
for (int i = s; i < e; i++)
list[i - s] = arr[i];
} else {
int[] left = twoSmallest(arr, s, (s + e) / 2);
int[] right = twoSmallest(arr, (s + e) / 2, e);
list = new int[4];
list[0] = left[0];
list[1] = left[1];
list[2] = right[0];
list[3] = right[1];
}
Arrays.sort(list);
return new int[] {list[0], list[1]};
}
中找到两个最小的数字。你可以这样打电话:
arr
答案 1 :(得分:-1)
private static int findMinFromArray(int[] iArray, int index, int min) {
if(index <= (iArray.length - 1)){
if(iArray[index] < min){
min = iArray[index];
}
System.out.println("Before: " + "Index = " + index + " | Min = " + min);
findMinFromArray(iArray, index + 1, min);
}
System.out.println("After: " + "Index = " + index + " | Min = " + min);
return min;
}
我不确定如何让程序停止,而不是像它正在做的那样再次回来。这只能找到最小的。