正确的代码:

class Solution {
public:int mySqrt(int x) {int left = 0;int right = x;long long res = (right + left) / 2;while(left <= right){if(res * res == x) return res;else if(res * res > x)  right = res - 1;else if(res * res < x)  left = res + 1;res = (right + left) / 2;}return res;}
};作者:beyonsir
链接:https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-by-beyonsir-fnhw/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

错误的代码:

class Solution {
public:int mySqrt(int x) {int left = 0;int right = x;long long res;while(left <= right){res = (right + left) / 2;if(res * res == x) return res;else if(res * res > x)  right = res - 1;else if(res * res < x)  left = res + 1;}return res;}
};

问题:为什么只是挪动了一下res求值的位置,整个代码就不对了?看逻辑明明也是先计算后判断的呀?

细节问题。因为正确的代码在改变了left和right之后又重新计算了一次res,因为根据上一次的结果对left和right都做出了调整,所以这个res是目前最接近平方等于x的;而错误的代码用的还是上一次的res,这样一旦不满足条件退出了循环,res没有随着left和right的更新而更新,就不对了,也就是说,res没来得及用上新的left和right,更新了left和right又有什么用呢?res的值仍然是陈旧的,不正确的。

220419第二次:

Java

有个大数得转换一下才行,另外,我的意见是,保持一个模板写,别老换,换了就可能会错。

class Solution {public int mySqrt(int x) {int l=1,r=x;while(l<=r){int mid = l+(r-l)/2;if((long)mid*mid<x&&(mid+1)>x/(mid+1)){return (int)mid;}if((long)mid*mid>x&&(mid+1)<x/(mid+1)){return (int)mid;}//这两组放前面好点if(mid<x/mid){l=mid+1;}else if(mid>x/mid){r=mid-1;}else return (int)mid;}return 0;//其实走不到这里}
}

力扣69-x的平方根(解决一个问题:我的答案和题解很像,但是为什么过不了?C++、Java版)相关推荐

  1. 二分大法| 求X的开方,结果一个公式解决! (力扣69.X 的平方根)

    本文将讲述:69.X 的平方根(简单) 题目:给你一个非负整数,求其开方,向下取整 思路: 首先,我们把问题数学表示出来,就是:求 f(x) = x^2 - a = 0的解: 而且,题目要求的是 非负 ...

  2. 力扣69. x 的平方根

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

  3. 力扣 填充每个节点的下一个右侧节点指针

    填充每个节点的下一个右侧节点指针 题目描述 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left ...

  4. 每日力扣——69. Sqrt(x)

    class Solution { public:int mySqrt(int x) {long i=0;while(i*i<=x){i++;}return (int)i-1;} };

  5. 求一个任意实数c的算术平方根_LeetCode 题解 | 69. X 的平方根

    本期精选题解由我们的用户"liweiwei1419"倾情撰写,一起来看看吧! 力扣 69. X 的平方根(点击查看题目) 题目描述 实现 int sqrt(int x) 函数. 计 ...

  6. 回溯法解决力扣79题单词搜索

    回溯法解决力扣79题单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母 ...

  7. 力扣学习记录(每日更新)

    文章目录 引言 简单 力扣:1 两数之和 力扣:20 有效的括号 力扣:21 合并两个有序链表 力扣:22 括号生成 力扣:27 移除元素 力扣: 35 搜索插入位置 力扣:70 [爬楼梯](http ...

  8. 力扣 1 至 100 中等

    欢迎访问我的博客首页. 力扣 1 至 100 中等 1. LeetCode 2.两数相加 2. LeetCode 3.无重复字符的最长子串 3. LeetCode 5.最长回文子串 4. LeetCo ...

  9. 力扣刷题记录--哈希表相关题目

    当遇到需要快速判断一个元素是否出现在集合里面的时候,可以考虑哈希法,牺牲一定的空间换取查找的时间. java常用的哈希表有HashMap.HashSet以及用数组去模拟哈希,这几种方法各有优劣. 数组 ...

最新文章

  1. mysql象限和投影_PostGIS空间数据库SRID背景知识 - 地理坐标系(球面坐标系)和投影坐标系(平面坐标系) - GIS开发者...
  2. confluence6.15.4部署及问题汇总
  3. jerseycom.sun.jersey.api.client.UniformInterfaceException
  4. C语言在BST中找到最接近目标的值的算法(附完整源码)
  5. Visual Studio内存泄漏检测
  6. django在nginx uwsgi和tornado异步方案在项目中的体验
  7. 了解恶意软件和插件!
  8. 使用WSO2 ESB进行邮件内容过滤
  9. java中使用es精准查询_使用ES简单查询语句须知
  10. matlab 过度曝光,MATLAB:补偿图像处理中的过度曝光/过饱和度
  11. java输出当前文件所在路径
  12. 微积分应用 计算机,微积分及其应用 P.D.Lax等著;林开亮
  13. win10升级工具_win10升级安装工具
  14. Sprinboot支付宝h5支付、退款(java版)
  15. 第一次天池大数据竞赛圆满落下帷幕
  16. ⻦哥的LINUX私房菜 学习
  17. Split过程源码分析
  18. 【数据治理】数据安全-数据脱敏方案
  19. jsp表单提交中文乱码的解决
  20. Android隐藏软件盘

热门文章

  1. Android和iPhone应用程序界面布局示例
  2. ZigBee MAC层(上)
  3. ORM版学员管理系统2
  4. PHP 二分查找(详细)
  5. 动态规划算法 - 钢条切割问题
  6. TCP传输连接建立与释放详解
  7. sqlserver 查询一个表的所有字段代码
  8. Android svg VectorDrawable 动画效果
  9. Vue和后台交互的方式
  10. Tensorflow学习笔记---1--Python基本操作