以递归方式查找数组中差异最小的两个元素

时间:2016-03-16 21:42:14

标签: java arrays algorithm recursion difference

我试图递归地找到差异最小的数组中的两个元素(假设数组已按递增顺序排序)。

我一直试图让我的代码只返回最小的总和,但似乎没有正确的递归。

public class SmallestDiff {
    public static void main (String [] args){
        int [] x = {1,3,6,9,126};
        System.out.println(smallestDiff(x,4));
    }

    public static int smallestDiff (int [] array, int index){
        int result;
        if (index>0){
            int diff = Math.abs((array[index]-array[index-1]));
            result = Math.min (diff, smallestDiff(array,index-1));
        }
        else {
            return array[0];
        }
        return result;
    }
}

3 个答案:

答案 0 :(得分:0)

你的错误是

return array[0];

array[0]不是值之间的差异,因此不应返回。修复程序的最简单方法是用

替换此行
return array[1] - array[0];

答案 1 :(得分:0)

试试这个:

public class SmallestDiff {

public static void main(String[] args) {
    int[] x = { 1, 3, 6, 9, 126 };

    int result;
    if (x.length < 2) {
        result = x[0];
    }
    else{
        result = smallestDiff(x, x.length-1);
    }
    System.out.println(result);

}

public static int smallestDiff(int[] array, int index) {

    if (index == 0) {
        return Integer.MAX_VALUE;

    }

    int diff = (array[index] - array[index - 1]);
    return Math.min(diff, smallestDiff(array, index - 1));

}

}

如果数组中只有一个元素,此解决方案将打印第一个元素。否则,它将始终产生两个元素之间的最小差异。

答案 2 :(得分:0)

如果您的数组已排序,则无需递归。 下面的代码解决了迭代问题。

public class SmallestDiff {

public static void main(String[] args) {
    int[] x = {1, 3, 6, 9, 126};
    System.out.println(smallestDiff(x));
}

public static int smallestDiff(int[] array) {
    int result = Integer.MAX_VALUE;
    for (int i = 0; i < array.length - 1; i++) {
        int diff = Math.abs((array[i] - array[i + 1]));
        if (diff < result) {
            result = diff;
        }
    }
    return result;
}

}