百度面试题:求绝对值最小的数
有一个已经排序的数组(升序),数组中可能有正数、负数或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)); } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步