Solution 1 - Binary Search
Search x in [1, num] for x*x == num without using sqrt.
TimeComplexity:O(logn)
SpaceComplexity:O(1)
function isPerfectSquare(num){
let l=1,r=num;
while(l<=r){
const m=l+Math.floor((r-l)/2);
const sq=m*m;
if(sq===num) return true;
if(sq<num) l=m+1; else r=m-1;
}
return false;
}
console.log(isPerfectSquare(16));function isPerfectSquare(num:number):boolean{
let l=1,r=num;
while(l<=r){
const m=l+Math.floor((r-l)/2);
const sq=m*m;
if(sq===num) return true;
if(sq<num) l=m+1; else r=m-1;
}
return false;
}
console.log(isPerfectSquare(16));package main
import "fmt"
func isPerfectSquare(num int) bool {
l, r := 1, num
for l <= r {
m := l + (r-l)/2
sq := m * m
if sq == num {
return true
}
if sq < num {
l = m + 1
} else {
r = m - 1
}
}
return false
}
func main() {
fmt.Println(isPerfectSquare(16))
}fn is_perfect_square(num: i64) -> bool {
let (mut l, mut r) = (1i64, num);
while l <= r {
let m = l + (r - l) / 2;
let sq = m * m;
if sq == num { return true; }
if sq < num { l = m + 1; } else { r = m - 1; }
}
false
}
fn main() {}