面試題81 有序陣列中絕對值最小的元素

2021-07-11 04:34:47 字數 656 閱讀 5725

題目:

給定乙個有序整數序列(非遞減序),可能包含負數,找出其中絕對值最小的元素,比如給定序列-5、-3、-1、2、8則返回1。

思路:由於是有序陣列,而且是搜尋問題,所以首先考慮二分查詢法。

對於每個子陣列,可以考慮一下幾種情況:

1)如果給定的序列中所有的數都是正數,那麼陣列的第乙個元素就是結果。

2)如果給定的序列中所有的數都是負數,那麼陣列的最後乙個元素就是結果。

3)如果給定的序列中既有正數,又有負數,那麼絕對值的最小值一定出現在正數和負數的分界處。

#include #include using namespace std;

const int n = 100;

const int pooln = 3;

bool samesign(int m, int n)

int mininumabsolutevalue(int *arr, int n)

if (samesign(arr[mid], arr[high]))

}return arr[low];

}int main()

; cout << mininumabsolutevalue(arr, 6) << endl;

return 0;

}

找出有序陣列中絕對值最小的數

假設陣列是從小到大排序,數值可能為負數 0 正數。思路一 可以一次性遍歷一遍,找出絕對值最小值,此時時間複雜度為o n 缺點是沒有利用陣列是有序的這一特點。思路二 陣列有序,可以利用二分查詢的特性。中間的數是正數,往後找 中間的數是負數,往前找。問題的本質是找到正數的最小值,或負數的最大值,分析以下...

遞增陣列中絕對值最小的數

求乙個遞增的整數陣列中,絕對值最小的數。陣列中可以有正負整數和0,要求複雜度 o logn 思路 有序陣列,用二分查詢。如果乙個數大於零,那麼要找的數在他左邊或者是他本身。如果乙個數小於零,那麼要找的數在他右邊或者是他本身。遞迴查詢。public class solution if array en...

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

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