題目:
給定乙個有序整數序列(非遞減序),可能包含負數,找出其中絕對值最小的元素,比如給定序列-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.陣列中的元素全為負,...