【力扣】69. x 的平方根

题目描述

给你一个非负整数 x ,计算并返回 x算术平方根

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

提示:

  • 0 <= x <= 231 - 1

解题方案

暴力破解

  • C
int mySqrt(int x) {
    for(long i = 0; i < 65536; i++)
    {
        if(i * i <= x && (i + 1) * (i + 1) > x)
        {
            return i;
        }
    }
    return 0;
}

二分法

  • C
int mySqrt(int x) {
    int left = 0, right = x / 2, mid = 0; 
    if (x == 0) 
    {
        return 0;
    }
    if (x == 1) 
    {
        return 1;
    }
    while (left < right)
    {
        mid = left + (right - left + 1) / 2;
        if (mid > x / mid)
        {
            right = mid - 1;
        }
        else
        {
            left = mid;
        }
    }
    return left;
}

你可能感兴趣的:(力扣,leetcode,算法)