題目為:
有乙個已經排序的陣列(公升序),陣列中可能有正數、負數或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<<"絕對值最小的數是:"<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
}
百度面試題 求乙個已排序的陣列中絕對值最小的元素
題目為 有乙個已經排序的陣列 公升序 陣列中可能有正數 負數或0,求陣列中元素的絕對值最小的數,要求,不能用順序比較的方法 複雜度需要小於o n 可以使用任何語言實現 例如,陣列 絕對值最小的是 4。這一題該如何求呢?初步的解決思路是 1.陣列中的元素全為正,取最左邊的數字 2.陣列中的元素全為負,...
百度的面試題《卷一》
一題 程式題 所謂ip攻擊是指某個ip在短時間內多次訪問伺服器,導致伺服器崩潰。ip位址是0.0.0.0到255.255.255.255。訪問時間是0.0.0到 23.59.59秒 條件1 現在有n行的資料,每行是一條資訊 n 1000000 2,每行資料是由ip 時間組成,中間由空格連線 如 17...
百度面試題 把陣列排成最小的數
問題描述 輸入乙個正整數陣列,將它們連線起來排成乙個數,輸出能排出的所有數字中最小的乙個。例如輸入陣列,則輸出這兩個能排成的最小數字32132。請給出解決問題的演算法,並證明該演算法。思路 先將整數陣列轉為字串陣列,然後字串陣列進行排序,最後依次輸出字串陣列即可。這裡注意的是字串的比較函式需要重新定...