Leetcode-二分
69. x的平方根 https://leetcode-cn.com/problems/sqrtx/
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
解:
二分,不断枚举可能的结果,判断其平方和x的关系。这题二分的过程中考虑直接用浮点型来处理,比用整型处理更通用。
class Solution:
def mySqrt(self, x: int) -> int:
if x <= 1:
return x low, high = 0., float(x)
while abs(high - low) > 1e-5:
mid = (high + low)/2
y = mid*mid if y == float(x):
return int(mid)
elif y < float(x):
low = mid # 因为是浮点型,直接mid赋给low就行
else:
high = mid
return int(high)
牛顿迭代法,以直线代替曲线,用一阶泰勒展式(即在当前点的切线)代替原曲线,求直线与 x 轴的交点,重复这个过程直到收敛。
如果要求2的平方根,令f(x)=x2 -2,如下图。

from https://leetcode-cn.com/problems/sqrtx/solution/niu-dun-die-dai-fa-by-loafer/
如何通俗易懂地讲解牛顿迭代法求开方?数值分析? - 马同学的回答 - 知乎 https://www.zhihu.com/question/20690553/answer/146104283

所以要求给定的 X 的平方根,xn+1 = xn - (xn2 - X) / 2xn ,迭代到满足逼近精度即可。考虑到这题要求向下取整。
class Solution:
def mySqrt(self, x: int) -> int:
if x <= 1:
return x
cur = x
while True:
pre = cur
cur = (cur + x / cur) / 2
if abs(cur - pre) < 1e-5:
return int(cur)
367. 有效的完全平方数 https://leetcode-cn.com/problems/valid-perfect-square/
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
解:
先按浮点型计算一下给定数的平方根,再取整后平方一下和num比较,相等的话即为完全平方数。
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num <= 1:
return True
low, high = 0., float(num)
while abs(high - low) > 1e-5:
mid = (high + low)/2
y = mid*mid if y == float(num):
return True
elif y < float(num):
low = mid
else:
high = mid return True if int(high) ** 2 == num else False
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num <= 1:
return True
cur = num
while True:
pre = cur
cur = (cur + num/cur) /2
if abs(cur-pre) < 1e-5:
return True if int(cur) ** 2 == num else False
直接按整数二分,找不到整数平方根就不是完全平方数。
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num <= 1:
return True
low, high = 0, num
while low <= high:
mid = low + (high - low)//2
y = mid ** 2
if y < num:
low = mid + 1
elif y > num:
high = mid - 1
else:
return True
return False
Leetcode-二分的更多相关文章
- leetcode二分查找问题整理
自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的 ...
- leetcode 二分查找
https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手 public class Solution { public in ...
- Leetcode: 二分搜索法
package com.LeetCode; /** * 算法:二分搜索法查找一个值,并返回索引值 * https://leetcode.com/problems/search-insert-posit ...
- 算法leetcode二分算法
二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 一.有序序列 ...
- [leetcode]二分查找总结
Search for a Range 1.最简单的想法,用最普通的二分查找,找到target,然后向左右扩张,大量的重复的target,就会出现O(n)效率. class Solution { pub ...
- leetcode 二分查找 Search in Rotated Sorted ArrayII
Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ...
- Leetcode 二分查找 Search Insert Position
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ...
- leetcode 二分查找 Search in Rotated Sorted Array
Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...
- leetcode二分查找相关
目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...
- 【Leetcode 二分】 滑动窗口中位数(480)
题目 中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 ...
随机推荐
- laravel中elastisearch安装和测试运行是否成功(注意是windows下的操作)
1.去elasticsearch官网下载,如果太慢可以在我上一个随笔看下载地址 2.下载完解压缩,在cmd中找到到elasticsearch的bin目录下执行.\elasticsearch.bat - ...
- webdriver入门之环境准备
1.安装ruby 下载ruby的安装包,很简单,不解释.装好之后打开cmd输入以下命令验证是否安装成功 ruby -v 2.安装webdriver 确保机器联网,用gem命令安装是在有网络的情况下进行 ...
- python3笔记-函数
创建函数 def 函数名(参数列表): 函数语句 函数的命名规则:一个单词直接小写 # 多个单词,每个单词小写,以下划线分隔 文档化说明 函数首行加 '' 或 ''' ''' 使用函数名.__doc_ ...
- Codeforces1393 题解(A-D)
AC代码 A. Rainbow Dash, Fluttershy and Chess Coloring 可以推导出\(f_1 = 1, f_2 = 2, ..., f_n = f_{n - 2} + ...
- 详细分析链表中的递归性质(Java 实现)
目录 链表中的递归性质 前言 LeetCode 上关于链表的一道问题 203 号题目 移除链表中的元素 递归的基本概念与示例 链表天然的递归性 小结 链表中的递归性质 前言 在前面的 链表的数据结构的 ...
- akka-streams - 从应用角度学习:basic stream parts
实际上很早就写了一系列关于akka-streams的博客.但那个时候纯粹是为了了解akka而去学习的,主要是从了解akka-streams的原理为出发点.因为akka-streams是akka系列工具 ...
- xAxis&yAxis
const option = { color: ['#546570', '#2f4554', '#61a0a8'], xAxis: { type: 'category', data: ['Mon', ...
- shell小技巧(4)AIX和Linux计算天前日期
Linux计算天前日期: date -d "- day" +%Y%m%d AIX计算5天前日期: perl -e "use POSIX qw(strftime); pri ...
- 关于Nginx mmap(MAP_ANON|MAP_SHARED, 314572800)报错
mmap 报错解决 今天修改了一下测试环境的Nginx的nginx.conf,然后做检测的时候报了一个错误 /usr/local/bin/nginx -c /usr/local/etc/openres ...
- 总结SUMMARY
Summary 多线程 多线程 pthread NSThread 创建线程的方式 NSThread 的 Target 线程状态 线程属性 资源共享 原子属性 线程间通讯 GCD 同步 & 异步 ...