LeetCode小白菜笔记[17]:Sqrt(x)
LeetCode小白菜笔记[17]:Sqrt(x)
69. Sqrt(x) [easy]
Implement int sqrt(int x)
.
Compute and return the square root of x.
x is guaranteed to be a non-negative integer.
Example 1:
Input: 4
Output: 2
Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.
题目要求很简单,就是对整数开根号。
先试试最枚举的暴力方法,看看有没有时间限制:
class Solution(object):def mySqrt(self, x):""":type x: int:rtype: int"""i = 0while (i+1) * (i+1) <= x:i += 1return i
time limit excess 。。。果然有时间限制。考虑其他方法。实际上这就是一个对于从0~n的整数里面查找满足条件的整数的问题,既然是查找,那就可以二分来做。另外,考虑这个问题可以看做是函数求零点,或者说是方程求根问题,而且要求是整数,对精度要求这么低,可以牛顿迭代。
考虑牛顿迭代,对于 f(x)=0 f ( x ) = 0 f(x) = 0 ,可以构造 y=f(x) y = f ( x ) y = f(x),求其零点。对于一个guess,比如 x0 x 0 x_0,那么有在此处的切线:
y = f^{'}(x_0)(x-x_0)+f(x_0)
点斜式方程,这个线性方程的零点就是:
x = -\frac{f(x_0)}{f^{'}(x_0)}+x_0
如果我们对于这个零点作为下一个guess,重复以上步骤,这就是牛顿迭代,所以上式中的 x x x和x0" role="presentation" style="position: relative;">x0x0x_0可以写成 xn+1 x n + 1 x_{n+1}和 xn x n x_n,就变成了迭代公式。对于本问题,一个特例就是:
y=f(x) = x^2 - a ,其中a就是我们要求根的那个数字。所以迭代公式为:
x_{k+1} = \frac{1}{2}(x_k+\frac{a}{x_k})
以a为第一次guess,可以迭代,因为精度要求是整数部分即可,又由于牛顿迭代的误差是越来越小的,又因为二次函数是凸的,切线应该在下面,所以数值应该是逐渐减小的,因此找到第一个整数部分的平方小鱼等于a的即可,code如下:
class Solution(object):def mySqrt(self, x):""":type x: int:rtype: int"""rt = xwhile int(rt) * int(rt) > x:rt = 0.5 * ( rt + x / rt )return int(rt)
就这几句。。。结果通过。但是比较慢,125ms,超过百分之4.5,后来发现,第一个guess不必从x开始,可以从x/2+1即可,再测试,结果:
69ms,12.17%,还是比较慢,但是有提高。
2018年2月10日01:45:36
夜深了,睡觉~
LeetCode小白菜笔记[17]:Sqrt(x)相关推荐
- LeetCode小白菜笔记[3]:Palindrome Number
LeetCode小白菜笔记[3]:Palindrome Number 9. Palindrome Number [Easy] 题目:Determine whether an integer is a ...
- LeetCode小白菜笔记[1]:Two Sum
LeetCode小白菜笔记[1]:Two Sum 1. Two Sum [Easy] 题目: Given an array of integers, return indices of the two ...
- springmvc学习笔记(17)-上传图片
2019独角兽企业重金招聘Python工程师标准>>> springmvc学习笔记(17)-上传图片 标签: springmvc [TOC] 本文展示如何在springmvc中上传图 ...
- 2020-4-5 深度学习笔记17 - 蒙特卡罗方法 3 ( 马尔可夫链蒙特卡罗方法MCMC-先验分布/后验分布/似然估计,马尔可夫性质)
第十七章 蒙特卡罗方法 中文 英文 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性) 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要 ...
- 经济学人精读笔记17:无现金时代,电子支付大势所趋
# 经济学人精读笔记17:无现金时代,电子支付大势所趋 标签(空格分隔): 经济学人 Part 1 The dash off cash Rich countries must start planni ...
- leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排
leetcode 面试题 17.14. 最小K个数 [难度:中等] 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], ...
- [leetcode 面试题 17.17] -- 多次搜索,KMP与字典树
[leetcode 面试题 17.17] -- 多次搜索 题目来源 分析 KMP思路 完整代码 字典树 完整代码 题目来源 https://leetcode-cn.com/problems/multi ...
- 华为HCIA-datacom 学习笔记17——IPv6基础
华为HCIA-datacom 学习笔记17--IPv6基础 IPv6基础 1.ipv4与ipv6 地址长度32bit IPv6:IP地址长度128bit IPv4包头(20byte~60byte) I ...
- 【计算机网络学习笔记17】网络安全、加密技术、“Virtual Private Network”技术
[计算机网络学习笔记17]网络安全.加密技术."Virtual Private Network"技术 一.网络安全概述 1.1 网络系统的安全目标: 1.可用性(Availabil ...
最新文章
- Fedora 从 15.0 开始将修改以太网卡命名规则
- linux resolv.conf详解
- 内存泄露调试工具visualleakdetector使用方法
- java超出gc开销_通过这5个简单的技巧减少GC开销
- 上海政府版WINXP真相大揭秘
- 苹果mac微软表格处理工具:microsoftexcel
- 中国全国行政区代码表
- 二十年经典港台电视剧回顾
- BAT 批处理注释命令rem、@rem和::
- 基于STM32F103的多种波形示波器制作
- 10行代码实现抽奖助手自动参与抽奖
- 嵌入式Linux系统工程师系列之ARM920T的MMU与Cache
- Java游戏项目之黄金矿工
- (LINPACK)HPL测试成功步骤整理
- vscode 删除的文件如何找回??
- fpc软性线路板生产工艺
- K-近邻算法全面解析
- 第一章-总论财务管理概述
- isp,iap,sw-jtag
- solo 电路 耳放_Graham Slee SOLO 耳机放大器发展史