3. LeetCode 69. x的平方根

 

 代码:

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型。

posted @ 2023-05-13 17:44  创造一个有琳的世界  阅读(18)  评论(0)    收藏  举报