Typical binary search.. but take care of data overflow if you are using C++
class Solution { public: bool isPerfectSquare(int num) { if(num < 0) return false; if(num < 2) return true; long long i = 1, j = num - 1; while(i <= j) { long long mid = (i + j) / 2; long long r = mid * mid; if(r == num) return true; if(r < num) i = mid + 1; else j = mid - 1; } return false; } };