有一个已经排序的数组(升序),数组中可能有正数、负数或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;
}
网友评论