实现平方根函数

实现平方根函数

问题

这个题目说的是,你要实现一个函数,来计算非负整数 n 的平方根,平方根只需返回整数部分即可。

比如,使用你实现的函数来计算 9 的平方根是 3:

f(9) = 3

由于 8 的平方根是 2 点几,使用你实现的函数只需要返回整数部分 2 即可:

f(8) = 2

代码

public class AlgoCasts {

  // Time: O(log(n)), Space: O(1)
  public int sqrtBinarySearch(int n) {
    long low = 0, high = n;
    while (low <= high) {
      long mid = low + (high - low)/2;
      long mid2 = mid * mid;
      if (mid2 < n) low = mid + 1;
      else if (mid2 > n) high = mid - 1;
      else return (int)mid;
    }
    return (int)high;
  }

  // Time: O(log(n)), Space: O(1)
  public int sqrtNewton(int n) {
    long x = n;
    while (x*x > n) {
      x = (x + n/x) / 2;
    }
    return (int)x;
  }

}

  转载请注明: ForwardXu 实现平方根函数

 上一篇
合并两个有序数组 合并两个有序数组
合并两个有序数组问题 这个题目说的是,给你两个递增排序的数组,你要把第二个数组合并到第一个,并使其仍然保持递增排序。两个数组中的元素个数会显式地给出,并且第一个数组的大小可以容纳下两个数组中所有的元素。 比如说给你的两个数组是: 2, 4
2018-12-12
下一篇 
随机洗牌 随机洗牌
随机洗牌问题 这个题目说的是,给你一个整数数组表示一副牌,你要写一个随机洗牌函数来返回这个数组的一个排列。并且要保证每次返回的排列都是等概率的。假设已经给你一个完美的随机数生成器。 代码 public class AlgoCasts {
2018-12-09
  目录