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

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

AbsSmall.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

1
2
3
4
5
6
7
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 @   抢地主  阅读(288)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示