/**
* Source : https://oj.leetcode.com/problems/sqrtx/
*
*
* Implement int sqrt(int x).
*
* Compute and return the square root of x.
*/
public class Sqrt { /**
* 求x的平方根,这里要求的是整数
* 使用试乘法(可能存在大数乘法,会溢出)、或者试除法
* 这里使用试乘法,可以通过二分法来快速收敛
* 使用试除法可以避免大数乘法
*
* 试乘法
*
* @param x
* @return
*
*/
public int sqrt (int x) {
if (x == 0) {
return 0;
}
int mid = x / 2 + 1;
int left = 0;
int right = mid;
long temp;
while (left < right) {
temp = (long)mid * mid;
if (temp == x) {
return mid;
}
if (temp > x) {
right = mid - 1;
} else {
left = mid + 1;
}
mid = (right + left) / 2;
}
temp = right * right;
if (temp > x) {
return right - 1;
} else {
return right;
}
} /**
* 试除法
* @param x
* @return
*/
public int sqrt1 (int x) {
if (x == 0) {
return x;
}
int i = 1;
for (; i < x; i++) {
if (i == x / i) {
return i;
} else if (i > x/ i) {
return i - 1;
}
}
return i;
} /**
* 使用牛顿法:可计算较精确的根
* 参见:https://zh.wikipedia.org/wiki/%E7%89%9B%E9%A1%BF%E6%B3%95
*
* @param x
* @return
*/
public int sqrt2 (int x) {
if (x == 0) {
return x;
}
double current = 1;
double last = 0;
while (current != last) {
last = current;
current = (current + x / current) / 2;
}
return (int)current;
} public static void main(String[] args) {
Sqrt sqrt = new Sqrt();
System.out.println("=========sqrt============");
System.out.println(sqrt.sqrt(9));
System.out.println(sqrt.sqrt(8));
System.out.println(sqrt.sqrt(0));
System.out.println(sqrt.sqrt(1));
System.out.println(sqrt.sqrt(Integer.MAX_VALUE)); System.out.println("=========sqrt1============");
System.out.println(sqrt.sqrt1(9));
System.out.println(sqrt.sqrt1(8));
System.out.println(sqrt.sqrt1(0));
System.out.println(sqrt.sqrt1(1));
System.out.println(sqrt.sqrt1(Integer.MAX_VALUE)); System.out.println("=========sqrt2============");
System.out.println(sqrt.sqrt2(9));
System.out.println(sqrt.sqrt2(8));
System.out.println(sqrt.sqrt2(0));
System.out.println(sqrt.sqrt2(1));
System.out.println(sqrt.sqrt2(Integer.MAX_VALUE));
}
}

leetcode — sqrtx的更多相关文章

  1. [LeetCode] Sqrt(x) 求平方根

    Implement int sqrt(int x). Compute and return the square root of x. 这道题要求我们求平方根,我们能想到的方法就是算一个候选值的平方, ...

  2. leetcode算法分类

    利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode.com/problem ...

  3. leetcode bugfree note

    463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...

  4. LeetCode题目分类

    利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode.com/problem ...

  5. <转>LeetCode 题目总结/分类

    原链接:http://blog.csdn.net/yangliuy/article/details/44514495 注:此分类仅供大概参考,没有精雕细琢.有不同意见欢迎评论~ 利用堆栈:http:/ ...

  6. [LeetCode]题解(python):069-Sqrt(x)

    题目来源: https://leetcode.com/problems/sqrtx/ 题意分析: 实现一个整型的开根. 题目思路: 利用牛顿迭代法可以求解.首先讲数据类型转成浮点数,然后选取初始值为n ...

  7. LeetCode 题目总结/分类

    LeetCode 题目总结/分类 利用堆栈: http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ http://oj.l ...

  8. Leetcode 题解

    Leetcode Solutions Language: javascript c mysql Last updated: 2019-01-04 https://github.com/nusr/lee ...

  9. leetcode math类型题目解题总结

    2. Add Two Numbers https://leetcode.com/problems/add-two-numbers/description/ class Solution { publi ...

随机推荐

  1. redis安装及生产采用的启动方式和常用连接客户端

    1. 下载 wget命令 wget http://download.redis.io/releases/redis-5.0.2.tar.gz 2. 解压与安装 解压 tar xzf redis-5.0 ...

  2. jQuery源码框架fn解读

    (function( window, undefined ){ var jQuery = (function(){ var jQuery = function( selector, context ) ...

  3. drools规则引擎中易混淆语法分析_相互触发导致死循环分析

    整理了下最近在项目中使用drools出现的问题,幸好都在开发与测试阶段解决了,未波及到prod. 首先看这样两条规则: /** * 规则1_set默认利率a */ rule "rate_de ...

  4. Python 获取车票信息

    提示:该代码仅供学习使用,切勿滥用!!! 先来一个git地址:https://gitee.com/wang_li/li_wang 效果图: 逻辑: 1.获取Json文件的内容 2.根据信息生成URL ...

  5. Linux 使用记1 fastx toolkit安装问题

    1 安装fastx toolkit的时候,步骤按https://blog.csdn.net/LotusWang0723/article/details/78723409 其中可能会出现如下报错 tex ...

  6. ASP.NET Core MVC 源码学习:详解 Action 的匹配

    前言 在 上一篇 文章中,我们已经学习了 ASP.NET Core MVC 的启动流程,那么 MVC 在启动了之后,当请求到达过来的时候,它是怎么样处理的呢? 又是怎么样把我们的请求准确的传达到我们的 ...

  7. MySQL--MHA原理

    ##==============================================================##MHA(Master High Availability)是一种My ...

  8. zookeeper集群配置详细教程

      第一步:环境准备 环境 版本 说明 JDK 1.8 zookeeper运行所需 centos 7 操作系统 需要配置好JDK的环境变量 zookeeper-3.4.9.tar.gz 3.4.9 z ...

  9. JVM之垃圾收集器与内存分配回收策略(二)

    上一篇JVM垃圾收集器与内存分配策略(一),下面是jdk1.7版本的垃圾收集器之间的关系,其中连线两端的两种垃圾收集器可以进行搭配使用,下面来总结一下这些收集器的一些特点以及关系. 一.Serial收 ...

  10. Maven整合SSM测试

    前面也说到了关于SSM的整合,话不多说直接从创建项目开始CRUD之路(参考前面写过的Mybatis和Spring整合,SSM简单整合),这是整个项目的结构 以及最终的结果.(附上下载地址) 一.创建M ...