给定一个有序整数序列(非递减序),可能包含负数,找出其中绝对值最小的元素,比如给定序列-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));
}
}