367.有效的完全平方数

给定一个正整数num ,编写一个函数,如果num是一个完全平方数,则返回true,否则返回false
进阶:不要使用任何内置的库函数,如sqrt

示例1

输入:num = 16
输出:true

示例2

输入:num = 14
输出:false

分析

num是正整数,所以如果num是一个完全平方数,那么在1-num的区间内存在一个数X,满足X² = num,且区间[1,X)内的任何数的平方都小于num,区间(x,num]内的任何数都大于num。

实现

class Solution {
    public boolean isPerfectSquare(int num) {
        int left = 0;
        int right = num;
        while(left < right) {
            int mid = left + right >>> 1;
            //转为long进行比较,int可能会溢出
            long x = (long)mid * mid;
            if(x < num) {
                left = mid + 1;
            }else {
                right = mid;
            }
        }
        return left * left == num;
    }
}

每个不起眼的日子,都是反败为胜的资本