百度面试题:求绝对值最小的数

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

AbsSmall.java

public class AbsSmall {
	public int Bsearch(int[] arr)
	{
		int low=0;
		int high=arr.length-1;
		return Bsearch2(arr,low,high);
	}
	public int Bsearch2(int arr[],int low,int high)
	{
		int mid;
		if(arr[low]>=0)
			return arr[low];
		else if(arr[high]<=0)
			return arr[high];
		while(low<=high)
		{
			mid=(low+high)/2;
			if(arr[mid]==0)
				return 0;
			else if(arr[mid]<0)
			{
				if(arr[mid+1]>=0)
					return Math.abs(arr[mid])>arr[mid+1]?arr[mid+1]:arr[mid];
				else
					return Bsearch2(arr,mid+1,high);
			}
			else
			{
				if(arr[mid-1]<=0)
					return Math.abs(arr[mid-1])>arr[mid]?arr[mid]:arr[mid-1];
				else
					return Bsearch2(arr,low,mid-1);
			}
		}
		return 0;
	}
}

AbsSmallClient.java

public class AbsSmallClient {
	public static void main(String[] args)
	{
		int[] arr={-20,-13,-4,3,77,200};
		System.out.println(new AbsSmall().Bsearch(arr));
	}
}
posted @ 2015-08-30 17:43  抢地主  阅读(288)  评论(2编辑  收藏  举报