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 ...
随机推荐
- springboot之对之前的补充
Spring Cloud 初级 一. Spring Boot 回顾 1 什么是 Spring Boot? Spring Boot 是在 Spring 的基础之上产生的(确切的说是在 Sprin ...
- 一键洞察全量SQL ,远离性能异常
随着云数据库业务规模不断扩大,用户对安全审计.性能智能分析等高级特性的要求越来越高.如何安全审计SQL?如何快速定位性能异常?如何保护数据库安全?是每个云厂商不得不思考的问题. 华为云DAS服务提供的 ...
- Android开发之华为手机无法看log日志解决方法(亲测可用华为荣耀6)
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, 转载请说明出处. 在上家公司上班的时候,公司配了华为荣耀6的测试机,发现在eclipse下 无法查看 ...
- IntelliJ IDEA远程Debug Linux的Java程序,找问题不要只会看日志了
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 我们习惯于在本地开发的时候debug,能快速定位与解决问题,那部署在服务器上是不是就没有办法了呢?只能通过查看日志来定位? ...
- latex pdf 转 eps
latex pdf 转 eps 方法一,使用命令行,缺点是得到的文件有点大 pdf 转 ps, pdf2ps input.pdf output.ps ps 转 eps, ps2eps input.ps ...
- xUnit测试的顺序执行总结
cmliu 1,演示环境:windows 10企业版+Visual Studio 2019:.NET Core3.1:xUnit 2.4.1:.NET Standard 2.0.3 3,场景描述:前几 ...
- 10.深入k8s:调度的优先级及抢占机制源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 上一篇我们将了获取node成功的情况,如果是一个优先pod获取nod ...
- 一文带你了解Sql优化
我们后台开发人员每天都难免与数据库打交道,那么你在写sql语句的时候有注重到自己sql的效率吗?当你sql查询速度很慢的时候你有想过是你的sql语句造成的吗?看完这篇文章,我相信你会对sql优化有了一 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 云计算openstack核心组件——glance— 镜像服务(6)
一.glance介绍: Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚 ...