LeetCode: Sqrt(x)

\(\)

Challenge Description

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

Example 1:

Input: 4
Output: 2

Example 2:

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since 
             the decimal part is truncated, 2 is returned.

Approach with binary search

With binary search, the left pivot will be the integer value of sqrt. Remember don’t write the code like, this will trigger overflow for some inputs:

if(mid * mid == x) 
 .....

Time complexity: \(O(log(x))\).

class Solution {
public:
  int mySqrt(int x) {
    int left = 0;
    int right = x;
    if(x <= 1) return x;
    while(left < right-1) {
      int mid = left +  (right - left) / 2;
      if(mid == x/mid)
        return mid;
      else if(x/mid < mid)
        right = mid;
      else
        left = mid;
    }
    return left;
  }
};

Approach with newton methods

Newtons’ method is a clever method for computing the sqrt value, and we use double type for the accuracy.

#include <math.h>
class Solution {
public:
  int mySqrt(int x) {
    double val = (double)x;

    if(x <= 1) return x; //corner case
    while(true) {
      double last = val;
      val = (val + (double)x/val) * 0.5;
      if(abs(val - last) < 1e-9)
        break;
    }
    return (int)val;
  }
};

Preparing for an interview? Check out this!

Last Updated on

Leave a Reply

Your email address will not be published. Required fields are marked *