题目
https://leetcode-cn.com/problems/sqrtx/
思路
使i从1开始查找,判断i*i > x时,循环结束,当i*i<=x,记录res的值,这整个过程,可以用二分查找的思想我直接暴力😭😭,思维还不够敏捷。
AC代码
class Solution {
public:
int mySqrt(int x) {
/*
long long res;
if (x == 0) return 0;
if(x == 1) return 1;
long long i = 1;
while (i*i <= x){
res = i;
i++;
}
return res;
*/
//二分法
int left = 0;
int right = x;
int res;
if (x == 0) return 0;
if (x == 1) return 1;
while (left <= right){
int mid = (right - left) / 2 + left; //防止溢出
if ((long long) mid*mid <= x){
res = mid;
left = mid+1;
}
else
right = mid-1;
}
return res; //对从1~n遍历查找想要的值,应该使用二分查找
}
};