LeetCode Sqrt(x)
2015-09-15 00:21
253 查看
原题链接在这里:https://leetcode.com/problems/sqrtx/
Implement
Compute and return the square root of x.
很自然的想到由小到大每个数算平方和x比较,但如此会用O(n)时间。
与Pow(x, n)类似此类查找可以用 Binary Search, 先找middle = (left + right)/2, middle^2 和 x 比较,比x小就在middle 和 right这段找,反之亦然。
Note:1. middle 要设为long, 否则middle * middle 可能overflow
2. while loop的条件是l<=r, 不是< e.g. x = 2
3. return 别忘了加cast
4. 即使这不是一个perfect square 也是返回right, 因为此时right就是那个较小的值。
Time Complexity: O(logn). Space: O(1).
AC Java:
Implement
int sqrt(int x).
Compute and return the square root of x.
很自然的想到由小到大每个数算平方和x比较,但如此会用O(n)时间。
与Pow(x, n)类似此类查找可以用 Binary Search, 先找middle = (left + right)/2, middle^2 和 x 比较,比x小就在middle 和 right这段找,反之亦然。
Note:1. middle 要设为long, 否则middle * middle 可能overflow
2. while loop的条件是l<=r, 不是< e.g. x = 2
3. return 别忘了加cast
4. 即使这不是一个perfect square 也是返回right, 因为此时right就是那个较小的值。
Time Complexity: O(logn). Space: O(1).
AC Java:
public class Solution { public int mySqrt(int x) { if(x <= 0){ return 0; } int l = 0; int r = x; while(l <= r){ long mid = l+(r-l)/2; if(mid * mid < x){ l = (int)(mid+1); }else if(mid * mid > x){ r = (int)(mid-1); }else{ return (int)mid; } } return r; } }
相关文章推荐
- AndroidStudio安装
- 设计模式学习笔记二十四:优雅的菜单 - 组合模式
- C# “快捷方式” 实现程序开机启动
- [LeetCode][JavaScript]Binary Tree Inorder Traversal
- android点滴记录1
- java 发送HTTPS请求
- oracle 用Navicat创建的表的查询问题
- Unity3D逆向基础教程第五课
- 抽象工厂模式【转载】
- 基本Socket通信流程
- 神器VS2010:c/c++ &&&&&& masm->obj link编译与连接
- java点滴记录1
- shell简介及变量、脚本相关概念
- linux 安装jdk及tomcat指定jdk版本
- 信息检索学习笔记
- Unity3D逆向基础教程第四课
- 美版Linksys WRT1900AC v1刷OpenWrt经验
- 开发人员看测试之细说JBehave
- Unity3D逆向基础教程第三课
- android开发出现No Launcher activity found!