代码:
class Solution { public: int mySqrt(int x) { long long a = (long long)x; long long left = 0; long long right = a; while (left <= right) { long long mid = left + ((right - left) >> 1); if (mid * mid <= a) { if (((mid + 1) * (mid + 1)) > a) { return (int)mid; } else { left = mid + 1; } } else { right = mid - 1; } } return 0; } };
思路:
1. 计算x的算术平方根的整数部分,假设这个值是a。那么a就是从0到x的数组中的最后一个元素值的平方小于等于x的元素的值。
2. 考虑到x最大值为2^31-1,如果用二分查找,mid * mid 就溢出了。所以先强转成long long型。
标签:right,int,mid,long,69,平方根,LeetCode,left From: https://www.cnblogs.com/konosekai/p/17397823.html