(百度面試題目)對升序數組,求數組中絕對值最小的元素

來源:互聯網
上載者:User

有一個已經排序的數組(升序),數組中可能有正數、負數或0,求數組中元素的絕對值最小的數,
要求,不能用順序比較的方法(複雜度需要小於O(n)),可以使用任何語言實現
例如,數組{-20,-13,-4, 6, 77,200} ,絕對值最小的是-4。
演算法實現的基本思路:
找到負數和正數的分界點,如果正好是0就是它了,如果是正數,再和左面相鄰的負數絕對值比較,如果是負數,取取絕對值與右面正數比較。還要考慮數組只有正數或負數的情況。

#include<stdio.h>#include<stdlib.h>//數組有序的情況下,尋找絕對值最小的數 int getAbsMin(int arr[],int N){   if(N<=0)  throw "Invalid Arguments";   int left=0;   int right=N-1;   if(arr[left]>=0) return arr[left];   if(arr[right]<=0) return arr[right];   int mid;   while(true)   {      mid=(left+right)/2;      if(arr[mid+1]<0) left=mid+1;      else if(arr[mid]>0) right=mid-1;      else if(arr[mid]+arr[mid+1]>=0) return arr[mid];      else return arr[mid+1];    }   }int main(){    int array[]={-11,-3,-3,3,3,5,8};    printf("%d\n",getAbsMin(array,7));    system("pause");    return 0;} 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.