zoukankan      html  css  js  c++  java
  • 百度面试题:求绝对值最小的数

    有一个已经排序的数组(升序),数组中可能有正数、负数或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));
    	}
    }
  • 相关阅读:
    HDU What Are You Talking About
    谷歌面试题
    POJ 2299 UltraQuickSort
    单链表排序
    HDU Hat’s Words
    C++ const关键字
    求二叉树任意两点间的距离
    HDU Phone List
    POJ 2352 Stars
    C++ volatile关键字
  • 原文地址:https://www.cnblogs.com/zhouqg/p/4771243.html
Copyright © 2011-2022 走看看