[Leetcode] sqrt 开根号
Implementint sqrt(int x).
Compute and return the square root of x.
题意:求根号下x 的值
思路:使用二分搜索。先定义x平方根的取值区间,取值区间不同,在一些细节处理上也是不同的。这里去right为(x/2)+1,这是因为一个非负数x的平方根不大于x/2+1(另外,取right为x见Yu's graden) 。这里值得注意的是,若x的值足够大时,我们取试探值的平方以后会超过INT的类型的范围,所以,我们这里采用除的方式来解决问题,但是这又涉及一个问题,就是,若分母为0时的情况,所以这时应该先讨论x的值。代码如下:
 class Solution {
 public:
     int sqrt(int x)
     {
         if(x<)    return x;
         int  left=,right=(x/)+;
         while(left<=right)   //条件和下面right取值的对应
         {
             int mid=left+(right-left)/;
             if(x/mid==mid)
                 return mid;
             else if(x/mid>mid)
                 left=mid+;
             else
                 right=mid-;
         }
         return right;
     }
 };
还有一种是牛顿法,参见网友Annie Kim's Blog的博客。代码如下:
 class Solution {
 public:
     int sqrt(int x)
     {
         if(x==)    return ;
         double res=,pre=;
         while(res !=pre)
         {
             pre=res;
             res=(res+x/res)/;
         }
         return (int)res;
     }
 };
一个Sqrt函数引发的血案 一文有一个牛掰掰的算法,整体性能提高的不是一点两点。
[Leetcode] sqrt 开根号的更多相关文章
- 用C语言将一个数开根号后再取倒数的方法
		
在上学的时候,曾经看过有人写过这样的算法,就是将一个数开根号后再取倒数的算法,我本人也觉得十分巧妙,于是就将它积累了下来,让我们来看看是怎么回事: #include <stdio.h> # ...
 - LeetCode:Sqrt(x) 解题报告
		
Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. SOLUTION 1: 参见:二分法总结,以及模 ...
 - hdu 4027 Can you answer these queries? 线段树区间开根号,区间求和
		
Can you answer these queries? Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/sho ...
 - HDU 5828 Rikka with Sequence(线段树 开根号)
		
Rikka with Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
 - 刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)
		
这是一道关于线段树的区间开根号的裸题,没什么好讲的. 值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸... 能够注意到,指 ...
 - luogu P4145 上帝造题的七分钟2 / 花神游历各国 维护区间和&&区间开根号
		
因为开根号能使数字减小得非常快 所以开不了几次(6次?)很大的数就会变成1..... 所以我们可以维护区间最大值,若最大值>1,则继续递归子树,暴力修改叶节点,否则直接return (好像也可以 ...
 - 二分法和牛顿迭代实现开根号函数:OC的实现
		
最近有人贴出BAT的面试题,题目链接. 就是实现系统的开根号的操作,并且要求一定的误差,其实这类题就是两种方法,二分法和牛顿迭代,现在用OC的方法实现如下: 第一:二分法实现 -(double)sqr ...
 - java实现开根号的运算
		
面试的时候,偶然被问到,开根号的实现,虽然给面试官讲解了思路,但是没有实际实现过,今天闲来无事,就把自己的思路写一下,做个笔记. 如果某个数字正好可以开根号为2个整数,例如1,4,9等,那就很简单了. ...
 - Java实现开根号运算(不使用数组和String)
		
使用Java自己实现开根号运算,网上也有不少代码,多数都使用String或者数组.这里写一段只使用double基础数据类型实现的方法. private static double sqrt(int n ...
 
随机推荐
- 使用GC 初始化DG(将备份集复制到目标端再初始化)
			
概述 当前环境中有一个GC节点,一套RAC 11.2.0.4的数据库,一个已经使用GC进行在线初始化好的dg环境,需要模拟在远端使用rman备份集进行初始化DG的操作. 恢复环境 当前环境中 已经 ...
 - 仿京东淘宝商品详情页属性选择js效果
			
在网上找了好久发现都不符合要求就自己摸索写了一个,用到了linq.js这个linq to js 扩展,不然用纯JS遍历json查询要死人啊 demo:http://123.207.28.46:8086 ...
 - Pycharm中查看方法的源码
			
方法1.鼠标放在函数上,Ctrl+B,看源码 方法2.将光标移动至要查看的方法处,按住ctrl 键,点击鼠标左键,即可查看该方法的源码.
 - Linux命令应用大词典-第2章 获取帮助
			
2.1 help:查看内部Shell命令帮助信息 2.2 man:显示在线手册页 2.3 manpath:查看和设置man手册页的查询路径 2.4 info:阅读info格式的文件 2.5 pinfo ...
 - 前端开发工程师 - 05.产品前端架构 - 协作流程 & 接口设计 & 版本管理 & 技术选型 &开发实践
			
05.产品前端架构 第1章--协作流程 WEB系统 角色定义 协作流程 职责说明 第2章--接口设计 概述 接口规范 规范应用 本地开发 第3章--版本管理 见 Java开发工程师(Web方向) - ...
 - JAVA Map 之元素定位,冲突碰撞
			
基本特性: 维持健值对的集合接口,健不可以重复,每一个健只能映射到一个值. Map替代了原来的虚拟类Directory. Map提供了三种集合视角,keys(KeySet),values(Values ...
 - 题解 CF191C 【Fools and Roads】
			
树上差分半裸题 常规思路是进行三次DFS,然后常规运算即可 这里提供两次dfs的思路(wyz tql orz) 我们以样例2为例 我们考虑任意一条路径,令其起点为u终点为v,每走一次当前路径则v的访问 ...
 - django 与 flask里面从已有数据库表中反向生成models
			
django: 配置好数据库连接 python manage.py inspectdb > models.py 即可反向生成orm使用的models, 注意: > 后面可以定义为指定路 ...
 - 清橙 A1318 加强版:Almost
			
题意: 直接看题面吧 原版:\(n \leq 1e5, q \leq 3e4, TL 5s, ML 256G\) 加强版1:\(n,q \leq 1.5e5, TL 5s, ML 256G\) 加强版 ...
 - def语句和参数
			
如果调用print()或len()函数,你会传入一些值,放在括号内,在这里成为“参数”.也可以自己定义接受参数的函数.在文件编辑器中输入这个例子: def hello(name): print('He ...