百度面試題 求乙個已排序的陣列中絕對值最小的元素

2021-06-26 12:58:20 字數 1078 閱讀 9399

題目為:

有乙個已經排序的陣列(公升序),陣列中可能有正數、負數或0,求陣列中元素的絕對值最小的數,要求,不能用順序比較的方法(複雜度需要小於o(n)),可以使用任何語言實現

例如,陣列 ,絕對值最小的是-4。

這一題該如何求呢?

初步的解決思路是:

1.陣列中的元素全為正,取最左邊的數字;

2.陣列中的元素全為負,取最右邊的數字的絕對值;

3.陣列中有正數有負數,就用二分法查詢,判斷中間元素的符號

a)中間元素為正,繼續判斷中間元素前面乙個元素的符號

b)中間元素為負,判斷中間元素後乙個元素的符號

c)中間元素為零,令其等於結果值返回

下面是根據上面的想法的**實現,應該還會有漏洞

#include "stdafx.h"

#include

using namespace std;

//求取陣列中絕對值最小的數字

int minabsolute(int arr,int size);

//返回兩個數中較小的數

int compare(int a,int b);

int _tmain(int argc, _tchar* argv)

;int size = sizeof(a)/sizeof(int);

int result = minabsolute(a,size);

cout<<"絕對值最小的數是:"}int minabsolute(int arr,int size)

//陣列中的數全是正數,取最左邊的數

else if (arr[0] > 0 && arr[size-1] > 0)

//陣列有正有負,二分查詢

else

else if(arr[mid - 1] < 0)

else

}else if (arr[mid] < 0)

else if (arr[mid + 1] > 0)

else

} else}}

return result;

}int compare(int a,int b)

else

}【本文轉至】

乙個百度的面試題目

題目 乙個陣列中有2個數只出現了一次,其他的數都出現了兩次,寫乙個演算法找出這兩個只出現一次的數 分析 該題目可以通過異或完成,先讓我舉乙個例子 4 0100 5 0101 1 0001 5 0101 4 0100 上面的例子說明4 5 5 4 同理4 5 4 5 int find first 1 ...

乙個百度的面試題目

題目 乙個陣列中有2個數只出現了一次,其他的數都出現了兩次,寫乙個演算法找出這兩個只出現一次的數 分析 該題目可以通過異或完成,先讓我舉乙個例子 4 0100 5 0101 1 0001 5 0101 4 0100 上面的例子說明4 5 5 4 同理4 5 4 5 int find first 1 ...

百度面試題 從已排序的陣列中求絕對值最小的元素

題目為 有乙個已經排序的陣列 公升序 陣列中可能有正數 負數或0,求陣列中元素的絕對值最小的數,要求,不能用順序比較的方法 複雜度需要小於o n 可以使用任何語言實現 例如,陣列 絕對值最小的是 4。這一題該如何求呢?初步的解決思路是 1.陣列中的元素全為正,取最左邊的數字 2.陣列中的元素全為負,...