Valid Perfect Square — Binary Search or Math
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