求一个有序数组中绝对值最小的值

有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现

例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

解一:

public int minValueOfAbs(int[] array) {

        int len = array.length;

        if (array[0] >= 0) {

            return array[0];

        } else if (array[len - 1] <= 0) {

            return array[len - 1];

        }

        int low = 0;

        int high = len - 1;

        while (low <= high) {

            int mid = (low + high) / 2;

            if (array[mid] > 0) {

                if (array[mid - 1] < 0) {

                    return Math.abs(array[mid]) > Math.abs(array[mid - 1]) ? array[mid - 1] : array[mid];

                }

                high = mid - 1;

            } else if (array[mid] < 0) {

                low = mid + 1;

            } else {

                return array[mid];

            }

        }

        return -1;

    }

你可能感兴趣的:(求一个有序数组中绝对值最小的值)