1)題目
搜索插入位置
要求:
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
樣例:
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回類型是整數,小數部分將被捨去。
2)思路
二分法 找mid,計算mid的平方與x的大小,然後判斷,不斷縮小範圍,若沒找到正好的mid(mid*mid=x),則返回小的數
3)代碼
二分查找:
class Solution {
public:
int mySqrt(int x)
{
long long i=0;
long long j=x/2+1;
while(i<=j)
{
long long mid=(i+j)/2;
long long res=mid*mid;
if(res==x)
{
return mid;
}
if(res<x)
{
i=mid+1;
}else
{
j=mid-1;
}
}
return j;//return j 意思是while循環沒有找到mid,此時i>j,取小的
}
};