本人一直在努力地积累Leetcode上用Python, C++实现的题,并且会尽力讲清每道题的原理,绝不像其他某些博客简略地带过。
如果觉得讲的清楚,欢迎关注。

题目:

实现 int sqrt(int x) 函数。

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

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

示例 1:

输入: 4
输出: 2

示例 2:

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

又是一道python比较无敌的题。。。

不得不感慨,C++的难度与python相比绝对是一个天上一个地下。(近期坚持用C++刷题后的感慨)

方法一:利用库函数法(这种方法简直侮辱智商,所以也不写注释了)

import math
class Solution:def mySqrt(self, x):""":type x: int:rtype: int"""return int(math.sqrt(x))

方法二:二分法(题目提示的方法)

class Solution:def mySqrt(self, x):""":type x: int:rtype: int"""low = 0high = xmid = x // 2while low <= high:if mid*mid == x:return midif mid*mid < x:low = mid + 1else:high = mid - 1mid = (low + high) // 2return mid

熟悉的二分算法。这里要说的是在临界情况下,当low == high 并且依然mid*mid != x时,这时候根据情况会是mid*mid < x,因为要求的是平方根所以不会大于。最后更新的mid还是原来的mid,因为low+1后//2对最终mid没有影响。

方法三:牛顿迭代法:

class Solution:def mySqrt(self, x):""":type x: int:rtype: int"""s = xwhile (s*s - x < 0.000001):s = (s + s/x)/2return int(x)

无数算法教科书都介绍过的算法,也确实有二分的意思。

方法四:C++法(。。。这篇文章真的水)

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

是python的二分的C++版本。

总结:今天说一个细节的问题,二分的时候while 语句 < 和 <= 号的选择,以及更新low ,high (left, right)时的要不要加一的问题。这个问题有时还是真的一直在迷惑着我。就像这2个2分代码,就是这2种不同思路的体现。

while 里是<号的时候,整体思路是把low ,high 看成一个左闭右开的区间,所以high 不会等于low,一等于就什么也得不到了。

所以说right = mid,也就是说mid在开的位置上,实际上也是抛弃了mid这个选项了。而如果是<= 说明是左闭右闭,这种情况更新right时应该是right = mid - 1。

Leetcode 069 x的平方根 Python C++相关推荐

  1. LeetCode #69 x的平方根 二分查找

    LeetCode #69 x的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍 ...

  2. LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)

    LeetCode 75. Sort Colors (python一次遍历,模拟三路快排) 题目分析: 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历. 由于只用把数字隔离开,很容易想到快排的 ...

  3. LeetCode 字符串简单部分 算法 python实现

    ''' #2018-06-02 June Saturday the 22 week, the 153 day SZ LeetCode 字符串简单部分 算法 python实现 https://leetc ...

  4. LeetCode 518 Coin Change 2 (python)

    目录 LeetCode 518 Coin Change 2 (python) Code 欢迎一起来参与leetcode刷题项目 LeetCode 518 Coin Change 2 (python) ...

  5. leetcode 1556. Thousand Separator(python)

    leetcode 1556. Thousand Separator(python) 描述 Given an integer n, add a dot (".") as the th ...

  6. LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根

    LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型 ...

  7. LeetCode 题 - 69. x 的平方根 python解法

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

  8. LeetCode 319. Bulb Switcher--C++,java,python 1行解法--数学题

    LeetCode 319. Bulb Switcher–C++,java,python 1行解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有 ...

  9. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  10. leetcode 解压缩_谁说 Python 的 shutil 不支持 7z 解压缩,我来教你扩展它的功能!...

    Python 的内置模块 在 Python 的标准库中,有哪些你常用并且觉得犀利无比的模块? 不要说 time.datetime.os.sys,这些模块常用是常用,但是逼格不够高啊. 举个例子,如果你 ...

最新文章

  1. 读淘宝商品描述页源码delphi版
  2. 机器学习-预测之时间序列分析预测法原理及实战
  3. Linux as4开启telnet,Red hat AS4开启telnet过程
  4. BGP——OSPF与BGP协议联动(出现问题+解决方案配置)
  5. android 开发如何做内存优化
  6. 一台电脑两种jdk_jdk和jre有什么区别?
  7. 使用vuex和axios获取api数据
  8. python优先级队列-python 优先级队列
  9. 【php基础入门】细说PHP中的函数声明与使用详解(重要)
  10. python算法精解pdf_python算法精解
  11. Android 音频(一) _ 采样量化编码 AudioRecord 录制音频
  12. ONOS 南向抽象层分析
  13. 记首次CCF数据算法竞赛的心得与收获(排名top1、top2%、top8%),CCF明年再会!
  14. 回到那个夏天(千与千寻)
  15. 吐血推荐 36招搞定电脑一切难题
  16. 学计算机了情话,二十句哄女朋友的情话 每句都很管用
  17. HTTPS安全通信:HTTPS与SSL
  18. 雅思机考经验和考试内容(上海机考中心20191208)
  19. SVG SMIL 动画(基本动画 、变换动画)
  20. 2022.5.16-5.22 AI行业周刊(第98期):人生路上的打怪升级

热门文章

  1. laravel-admin saving回调失败/未成功可能原因
  2. jquery除法保留两位小数
  3. 数字经济助力企业高新技术企业发展,UMS攸信同力驱动系统层级建设!
  4. [去哪儿]裁减网格纸
  5. AssNineGridView:仿QQ空间,微信朋友圈展示图片的九宫格图片展示控件
  6. python 驱动 歌儿声学气压传感器 SPL06系列
  7. AE开发20210601之绘制集合要素、绘制点、空间查询、属性查询、图形查询、选择集内容、符号化
  8. java entrypoint_Jar打包用法详解
  9. 模板与泛型编程 c++ primer ch16.1
  10. [从头学数学] 第192节 导数及其应用