做直銷網(wǎng)站的公司做網(wǎng)站公司哪家正規(guī)
本題想到使用二分法不斷逼近一個區(qū)間,直到最后趨近于x,從而求得解。注意的點,一開始使用
if(mid * mid <= x)
進(jìn)行判斷時,會出現(xiàn)越界,原因是輸入一個很大的數(shù)是,超過int表示的范圍,繼而修改為這種判斷形式:
if( mid <= x/mid)
- 需要注意的是,這種判斷方式存在一定的精度問題
這種判斷方式有需要確保 mid 的值不為 0,那么左區(qū)間就需要從1開始。
那么當(dāng)輸入 x 的值為0時,只需要不進(jìn)入while循環(huán),直接返回 ans初始值0即可。
如果使用力扣官方題解,mid 設(shè)置為 long long類型,則無須這樣處理。
class Solution {
public:int mySqrt(int x) {int left = 1;int right = x;int ans = 0;while(left <= right){int mid = left + (right - left)/2;if( mid <= x/mid){left = mid + 1;ans = mid;}else if( mid > x/mid){right = mid - 1;}}return ans;}
};