leetcode 69 x的平方根

给你一个非负整数 x ,计算并返回 x 的 平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:
输入:x = 4
输出:2

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

文章目录

  • leetcode 69 x的平方根
  • 二分法

二分法

public int mySqrt(int x) {if(x<=1)return x;int left=1;int right=x;//为什么这边循环条件要写<=,而不是<,因为如果写成小于,那么循环退出条件就是left==right,那么返回的就是left或者right,因为left和right相等,所以mid=left或者right,但是我们并没有计算left*left是否等于x,所以必须将此left==right包含进去。while(left<=right){int mid=(left+right)>>1;if(mid<x/mid){             //相当于mid*mid<x//这边是最重要的一个点,为什么left=mid+1而不是left=mid;假设left=mid,因为到最后几次循环,left设为x,那么right=x+1,mid=x;因为mid*mid<x,left=mid=x;那么就会陷入死循环的状态。所以这边left必须为mid+1。left=mid+1;}else if(mid>x/mid){      //相当于mid*mid>x//如果mid*mid>x,right肯定等于mid-1。right=mid-1;}else{return mid;}}//因为循环结束条件是left=right+1,即right=left-1;因为上面的left赋值可能错过答案多加了1,所以最后返回的结果要减去1。比如x=8,//第一次 left=1,right=8,mid=4,mid*mid>8,right=mid-1=3//第二次 left=1,right=3,mid=2,mid*mid<8,left=mid+1=3,left错过答案//第三次 left=3,right=3,mid=3,mid*mid>8,right=mid-1=2//第四次不满足条件但是left=3,right=2,所以返回的是rightreturn right;//这边必须返回right}

4、leetcode69 x的平方根**相关推荐

  1. leetcode69. x 的平方根(二分法)

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 代码 ...

  2. LeetCode69. x 的平方根(二分查找)

    题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 思路 详见链接 代码 class ...

  3. C语言——leetcode69——X的平方根

    我将解析 及题目都放在了代码中 方便大家阅读 //69. x 的平方根 //给你一个非负整数 x ,计算并返回 x 的 算术平方根 . // //由于返回类型是整数,结果只保留 整数部分 ,小数部分将 ...

  4. Leetcode69 x的平方根(简单篇)

    题目如下: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: ...

  5. 【LeetCode69.x的平方根】——二分查找

    索引: 69.x的平方根: 初步思考:(二分查找) 左开右开: 左闭右开: 进一步思考:(数学方法) 指数算法: 牛顿迭代法: 69.x的平方根: 你一个非负整数 x ,计算并返回 x 的 算术平方根 ...

  6. LeetCode-69 x的平方根

    题目描述: 思路想法: 暴力求解法,从 0 - x/2+1 我们从小到大遍历每个数,看看有哪个数是满足 k*k==x 返回 k ; 或者k*k>x && (k-1)*(k-1)& ...

  7. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)

    3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...

  8. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  9. leetcode解题总览

    3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...

最新文章

  1. 不得不了解系列之限流
  2. python学习使用
  3. 几个Python运算符
  4. 10.1——为什么方法不能用static修饰
  5. Windows与Linux的主要区别
  6. 精简jdk包_在JDK 12精简数字格式中使用最小分数数字
  7. php刷新父页面,layui: 子iframe关闭/传值/刷新父页面
  8. ROS Rviz 显示超声波测量范围 Python
  9. Java菜鸟的初次实习经历
  10. iPhone6和iPhone6 Plus和iPhone5s屏幕尺寸,分辨率,密度 对比
  11. 【软件】网梭浏览器v2.4.7 思路
  12. TPU中的指令并行和数据并行
  13. 机场航班起降与协调管理系统飞机航班(含源码+论文+答辩PPT等)
  14. 10.Python面向对象编程
  15. 算法【动态规划】 | 【01】二维表结构
  16. linux veket安装教程,【重写】在U盘上安装使用Veket(Linux)系统
  17. 广州男子花12万买新车 保养时被告知车门被撬开维修过
  18. Beats: Filebeat 和 pipeline processors
  19. 国芯网国产芯片精选月刊V20190801 国产芯片 芯片选型 芯片厂家
  20. scrapy爬取免费代理IP存储到数据库构建自有IP池

热门文章

  1. java和equals区别_JAVA中==与equals的区别
  2. linux 查看flash大小,Linux OpenWRT查看CPU,RAM,Flash信息参数
  3. java继承构造_Java语言的继承结构
  4. centos php mcrypt,CentOS yum php mcrypt 扩展安装方法
  5. Python 常用排序Demo|冒、插、快、希等入门算法
  6. Django中六个常用的自定义装饰器
  7. chrome浏览器如何重新打开关闭的标签页?(快捷键ctrl+shift+t)
  8. python 如何理解 numpy 数组操作中的 axis 参数?
  9. RHCS套件实现高可用负载均衡集群(二)——Fence设备
  10. ThreadLocal怎么实现线程隔离的?可见性问题?为什么要重新定义一个threadLocalHashCode?为什么有内存泄露?弱引用又是什么?