【LeetCode】(69)Sqrt(x)(Medium)
2015-08-24 20:48
441 查看
题目
Sqrt(x)
Implement int sqrt(int x).
Compute and return the square root of x.
解析
就是自己实现开方运算,这里我使用的是迭代法,具体原理可以自己百度class Solution { public: int mySqrt(int x) { double ret = x; while (abs(ret*ret-x)>0.5) { ret = (ret + (double)x/ret)/2.0; } return (int)ret; } };
想了想题目,既然是int,肯定不会是希望你用这种方法,应该是一道搜索题,找到最合适的。
从1到x/2中去搜索最有可能的就可以了。这里用二分法
看看大神的代码
class Solution { public: int mySqrt(int x) { int left = 1, right = x / 2; int last_mid; // 记录最近一次mid if (x < 2) return x; while(left <= right) { const int mid = left + (right - left) / 2; if(x / mid > mid) { // 不要用x > mid * mid,会溢出 left = mid + 1; last_mid = mid; } else if(x / mid < mid) { right = mid - 1; } else { return mid; } } return last_mid; } };大神用的x/mid 和mid进行比较,我们拿n=20来举例看看这个代码如何运行
相当于从1,2,3,4,5,6,7,8,9,10中找到一个数字的平方最接近但不大于20
先算出middle = 5,于是在1,2,3,4中寻找,找到中间数2,从3,4中寻找,找到4,left=right,再找到right=5。已经不满足条件了,会退出。
其实就是找到一个数字x/mid>mid,但是(x+1)/mid < mid
相关文章推荐
- 小而零碎的知识点
- HDU2089 不要62(数位DP入门经典题目)
- hdu 4544 湫湫系列故事——消灭兔子(优先队列)
- Cocos2d-JS 使用cocostudio创建游戏并用摇杆控制游戏实例
- IOS UITextField 跳转到搜索界面
- 百度地图定位的功能使用管理类
- 栈和队列的共同点和不同点
- Aizu - 2306 Rabbit Party (DFS图论)
- JS中NaN及+=执行顺序
- Spring 3整合Quartz 2实现定时任务一:常规整合
- Android大图加载优化--基于LRU算法的本地文件缓存
- hdu5409
- 文本文件查看命令:cat, tac, more, less, tail, head
- SDKD-训练题-HDU-4786-Fibonacci Tree
- zjnu(1181)——石子合并
- HDU 1009.FatMouse' Trade
- JavaScript之运算符
- hdu5409
- Bash基础(1)
- 【Linux命令详解】2、文件和目录操作管理―(pwd、cd、ls、mkdir、rmdir、tree)