題目描述
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回類型是整數,小數部分將被捨去。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sqrtx
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
代碼以及思路
class Solution {
public int mySqrt(int x) {
/**
* 第一種做法:暴力法
* for i 從0到x,計算每一個i的平方,如果(第一個)i*i大於等於x,那麼這個i就是本題的解了
* 但是這樣會導致時間太長,提交程序發生錯誤
*
* 第二種做法:折半查找
* 定義left、right、mid
* left=0、right=x
* 因爲結果是向下取整,例如2.333算成2、2.888也算成2
* 所以有兩種情況
* 第一種,x/mid==mid,這種取邊緣值
* 第二種,left與right指向兩個相鄰的數,取較小值left爲結果
*
* 循環如下:
* mid=(left+right)/2
* 如果 right-left<=1 ,停止循環
* 如果 x/mid 大於 mid ,那麼 left=mid
* 如果 x/mid 小於 mid, 那麼 right=mid
* 如果x/mid 等於mid,那麼返回 mid
*
* 循環以後,返回left
* @param x
* @return
*/
int left=0;
int right=x;
int mid=0;
if(x==1){
return 1;
}
while(right-left > 1){
mid=(int)(left+right)/2;
if(x/mid < mid){
right=mid;
}else if(x/mid > mid) {
left=mid;
}else{
return mid;
}
}
return left;
}
}
總結
二分查找法的應用應該在熟悉一下。