有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现。例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。
自己写了一个,好像复杂度有点问题,如果绝对值最小的有多个,也只能输出其中之一,大家有更好的实现方法欢迎跟帖。
import java.util.Arrays;
public class MinAbsoluteValue{
public static void main(String[] args) {
MinAbsoluteValue minAbsoluteValue= new MinAbsoluteValue();
int[] source={-20,-13,-4, 6, 77,200};
System.out.println(minAbsoluteValue.getMinAbsoluteValue(source));
}
public int getMinAbsoluteValue(int[] source) {
int index = Arrays.binarySearch(source, 0);
int insertPos = -1 - index;
if(index >= 0) return 0;
else if(insertPos == source.length) return source[source.length - 1];
else if(insertPos == 0||Math.abs(source[insertPos])<Math.abs(source[insertPos-1])) return source[insertPos];
else return source[insertPos-1];
}
}