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

     from:  http://www.cnblogs.com/nokiaguy/archive/2013/01/29/2881476.html

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

例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

     原文用java写的,没看太懂,但很感谢博主的算法思路,即找正负数的临界值。于是我用C++实现了一遍,代码如下:

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 int getMinNum(int arr[],int n)
 5 {
 6     int index=0;
 7     int temp;
 8     if(arr[index]>0)
 9         return arr[index];
10     else if(arr[index]<0&&arr[n-1]<0)
11         return abs(arr[n-1]);
12     else
13     {
14         for(int i=index;i<n;i++)
15         {
16             if(arr[i]<0)
17                 continue;
18             else
19             {
20                 temp=abs(arr[i-1]);
21                 if(arr[i]<=temp)
22                     temp=arr[i];
23                 return temp;    
24             }
25         }
26     }
27 }
28 int main()
29 {
30     int arr[]={-20,-13,-4,6,77,200};
31     int minNum;
32     minNum=getMinNum(arr,6);
33     cout<<"the abs min num is "<<minNum<<endl;
34     return 0;
35 }
原文地址:https://www.cnblogs.com/xshang/p/2881613.html