Valid Perfect Square — Binary Search or Math

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 308 · Valid Perfect Square

Difficulty: Easy · Pattern: Binary Search / Math

Solutions

# Python — binary search
def isPerfectSquare(num):
    lo, hi = 1, num
    while lo <= hi:
        mid = lo + (hi-lo)//2
        sq = mid*mid
        if sq == num: return True
        elif sq < num: lo = mid+1
        else: hi = mid-1
    return False

# Math: n^2 = 1+3+5+...+(2n-1)
def isPerfectSquare(num):
    i = 1
    while num > 0: num -= i; i += 2
    return num == 0
// Java
public boolean isPerfectSquare(int num) {
    long lo=1, hi=num;
    while (lo<=hi) {
        long mid=lo+(hi-lo)/2, sq=mid*mid;
        if(sq==num) return true; else if(sq<num) lo=mid+1; else hi=mid-1;
    }
    return false;
}

Complexity

  • BS: O(log n)
  • Math trick: O(sqrt(n))

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro