知識點:
1、這道題目用搜尋的辦法求解sqrt函式,對於複雜的函式均可以用搜尋的方式實現。(前提是得到整數解,因為不是整數解無法遍歷)
2、對資料邊界的考慮,在計算中,盡量不要用乘法。比如要考慮 a*b 和 x的比較關係,轉化為a和x/b的比較,這樣做避免了a*b可能產生的整數溢位問題。與此同時,產生了新的問題:b必然不能等於0,這個要稍加注意;x/b也會存在向下取整的問題。
3、二叉搜尋中乙個很重要的函式,rank(int key)
rank(int key)用於搜尋,給定的鍵值key是否存在在陣列中,如果存在則返回下標,如果不存在,返回該值應該插入的位置。這一性質很重要。下面的這個實現,避免了遞迴,只是迴圈。
對rank()函式的進一步思考:
如果陣列中存在與關鍵值匹配的內容,一定會在while迴圈裡面執行「else return mid;」;如果沒有滿足,因為 i<=j 條件不滿足跳出了迴圈,那麼對於跳出的值 i,j,其判斷語句
if (data[mid] > key) j = mid - 1;
else if (data[mid] < key) i = mid + 1;
均是不滿足的,也就是
data[j]<= key
data[i]>= key
int data[len] = ;//公升序
int rank(int k)
return i;
}
題目:
implement int sqrt(int x).
compute and return the square root of x.
class solution {
public:
int mysqrt(int x) {
if(x==0) return 0;
int i=1;
int j=x;
int mid;
while(i<=j)
{mid=(j-i)/2+i;
if(mid>x/mid) j=mid-1;
else if(mid
Python實現二叉搜尋
二叉搜尋是在乙個有序的列表中,尋找目標元素。因此我們需要對半查詢即可。當目標元素比中間元素小,則在中間元素的左邊查詢 反之,則在目標元素的右邊查詢。直到左邊界比右邊界還要大停止查詢。def binarysearch target,arr right len arr 1 left 0 while le...
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
程式實現sqrt 函式
題意描述 寫乙個程式實現sqrt 函式 解題分析 平時用習慣了庫orapi,突然讓寫乙個sqrt 函式,不免要思考一下。以下給出兩種常見的解題思路 方法一 二分法。以sqrt 3 為例,運算過程是這樣的,任取乙個初始值,比如這裡取0,則有以下運算過程 0 3 2 1.5 1.5 1.5 3 1.5 ...