给定一个有序整数序列(非递减序),可能包含负数,找出其中绝对值最小的元素,比如给定序列-5, -3, -1, 2, 8 则返回1。
public class MinAbs { public static int calculate(int[] array) { return calculate(array, 0, array.length - 1); } public static int calculate(int[] array, int low, int high) { if (low == high) { if (array[low] < 0 && low + 1 < array.length) { return Math.abs(array[low]) > Math.abs(array[low + 1]) ? Math.abs(array[low + 1]) : Math.abs(array[low]); } else if (array[low] > 0 && low - 1 >= 0) { return Math.abs(array[low]) > Math.abs(array[low - 1]) ? Math.abs(array[low - 1]) : Math.abs(array[low]); } else { return Math.abs(array[low]); } } int mid = (low + high) / 2; if (array[mid] >= 0) { return calculate(array, low, mid); } else { return calculate(array, mid + 1, high); } } public static void main(String[] args) { int[] array = { -5, -3, -1, 2, 8 }; System.out.println(MinAbs.calculate(array)); } }