如何优化算法以找到给定数组中的最小绝对值差。这是我检查每个元素并返回值的方法。

static int minAbsVal(int[] myArray){

    ArrayList<Integer> diffs= new ArrayList(); // all absolute value differences

    for (int i = 0; i < myArray.length; i++) {
        for (int j = 0; j < myArray.length; j++) {
            if (myArray[j]!=myArray[i]){
                int absVal =Math.abs( myArray[i]- myArray[j]);
                diffs.add(absVal);
            }

        }
    }


    int min = diffs.get(0);
    for (int i = 1; i < diffs.size(); i++) {
        if (min>diffs.get(i)){
            min = diffs.get(i);
        }
    }
    return min;
}

最佳答案

检查此解决方案。如果数组包含重复项,则如果要避免,则返回0,也可以添加条件。

static int minAbsVal(int[] myArray){

            Arrays.sort(myArray);
            ArrayList<Integer> diffs= new ArrayList<Integer>(); // all absolute value differences

            for (int i = 0; i < myArray.length-1; i++) {
                diffs.add(Math.abs( myArray[i+1] - myArray[i]));
            }

            Collections.sort(diffs);
            return diffs.get(0);
        }


或者您也可以使用:-

static int minAbsVal(int[] myArray){

        Arrays.sort(myArray);
        int minimum=Math.abs( myArray[1] - myArray[0]);
        for (int i = 1; i < myArray.length-1; i++) {
            int diff = Math.abs( myArray[i+1] - myArray[i]);
            if (diff == 0)
                return 0;
            else if (minimum > diff)
                minimum = diff;
        }
        return minimum;
    }

08-17 03:53