博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode.69.求一个数的平方根
阅读量:6850 次
发布时间:2019-06-26

本文共 1093 字,大约阅读时间需要 3 分钟。

题目描述

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

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

示例1:

输入: 4输出: 2

示例2:

输入: 8输出: 2说明: 8 的平方根是 2.82842...,      由于返回类型是整数,小数部分将被舍去。

暴力版本

// 暴力解法func mySqrt(x int) int {    for i := 0; i <= x; i++ {        res := i * i        if res == x {            return i        } else if res > x {            return i - 1        }    }    return -1}

二分查找

//在有序数组中,找到最后一个小于等于给定值的数func mySqrt2(x int) int {    low, high := 0, x    for low <= high {        //防止大数相加溢出        //位运算更高效        mid := low + (high-low)>>1        product := mid * mid        if product > x {            high = mid - 1        } else {            if (mid == x) || (mid+1)*(mid+1) > x {                //遍历最后一个数 || 下一个数大于目标值                return mid            }            //下一个数小于等于目标值,所以mid不是最后一个数            low = mid + 1        }    }    return -1}

二分查找思路

  • 相当于从0-x中找到最后一个平方<=x的整数
  • 我们求解的是最后一个小于等于给定值的元素,所以当 product<=x时,需要确认 mid+1 的平方>x
  • 如果 mid+1 的平方 <= x ,说明mid肯定不是最后一个,更新low

GitHub

  • 各种数据结构及算法的Golang实现, LeetCode解题思路及答案
参考资料

本文为原创文章,转载注明出处,欢迎扫码关注公众号
tomorrowwu 或者网站 ,第一时间看后续精彩文章,觉得好的话,顺手分享到朋友圈吧,感谢支持。

image

你可能感兴趣的文章
Ubuntu 外网不通解决方案
查看>>
OSChina 周六乱弹 —— 历史总是惊人的相似
查看>>
MySQL 大小写
查看>>
Lync 2013部署图片赏析-证书服务安装配置
查看>>
HTML5 本地缓存 (web存储)
查看>>
tomcat redis session共享(包含redis安全设置)
查看>>
iptables中DNAT、SNAT和MASQUERADE的作用
查看>>
kvm命令学习记录
查看>>
小菜鸡进阶之路-First week
查看>>
ORACLE 10g SYSAUX表空间快速增长之WRH$_ACTIVE_SESSION_HISTORY篇
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
子数组的和的最大值(包括升级版的首尾相连数组)
查看>>
LeetCode - Nth Highest Salary
查看>>
9.ORM数据访问
查看>>
href=“javascript:”vs href=“javascript:void(0)”
查看>>
win10文件夹无法打开,双击闪屏
查看>>
【学习笔记14】全局类型转换器
查看>>
Spring Boot学习记录手册<1>
查看>>
在Word2007和Word2010中插入视频文件,并自动在word中播放
查看>>