69.x的平方根-力扣(LeetCode)

题目:

解题思路:

解决本题主要运用的方法是二分法,二分法是一种在有序数组中查找某一特定元素的搜索算法。鉴于本题满足整个序列是有序的,并且可以通过比较来改变区间,满足二分法的应用条件,所以采用二分法。

根据x是有符号整型数据,那么右区间可以确定为46341(根据x的最大值开方得到),在循环中不断进行比较和更新区间的操作,循环后,左边界的值即为目标元素,在整个过程中注意区间边界的赋值。

一个注意点是:if(mid * mid == x)中,mid * mid产生的中间结果可能会超出int类型的范围,在LeetCode中提交会报错,所以要改为范围更大的long类型或者long long类型(在自己的编辑器中,可能不会报这个错误)。

代码:

cpp 复制代码
int mySqrt(int x)
{
    int l = 0,r = 46341;//定义左右区间
    while(l < r)
    {
        long mid = l+(r-l)/2+1;//获取区间中点
        if(mid * mid == x)//找到目标元素
        {
            return mid;
        }
        else if(mid * mid > x)//目标元素在左区间
        {
            r = mid - 1;//更新区间
        }
        else//目标元素在右区间
        {
            l = mid;//更新区间
        }
    }
    //循环结束,此时l * l = x
    return l;
}
相关推荐
南宫生16 分钟前
力扣动态规划-26【算法学习day.120】
java·数据结构·算法·leetcode·动态规划
余辉zmh1 小时前
【动态规划篇】:动态规划解决路径难题--思路,技巧与实例
c++·算法·leetcode·动态规划
孑么1 小时前
力扣 单词拆分
java·算法·leetcode·职场和发展·动态规划
竹下为生1 小时前
LeetCode --- 435周赛
算法·leetcode·职场和发展
阑梦清川2 小时前
蓝桥杯---N字形变换(leetcode第6题)题解
leetcode·蓝桥杯
Luo_LA11 小时前
【LeetCode Hot100 多维动态规划】最小路径和、最长回文子串、最长公共子序列、编辑距离
算法·leetcode·动态规划
拉一次撑死狗19 小时前
LeetCode数学相关算法题(1)【C语言版】
c语言·算法·leetcode·职场和发展
马剑威(威哥爱编程)19 小时前
【推荐】爽,在 IDE 中做 LeetCode 题目的插件
ide·算法·leetcode
飞川撸码21 小时前
【LeetCode 热题100】74:搜索二维矩阵(二分、线性两种方式 详细解析)(Go 语言实现)
算法·leetcode·golang
硕风和炜1 天前
【LeetCode: 378. 有序矩阵中第 K 小的元素 + 二分】
java·算法·leetcode·面试·矩阵·二分