码迷,mamicode.com
首页 > 其他好文 > 详细

367. 有效的完全平方数

时间:2018-11-09 23:24:22      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:als   一个   max   square   时间   利用   bool   左右   执行时间   

给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。

说明:不要使用任何内置的库函数,如  sqrt

示例 1:

输入:16
输出:True

示例 2:

输入:14
输出:False

思路: 这考察的是利用二分法来找平方数,注意 (min+max)/2 的平方可能会溢出,所以其平方的值可以用一个long来存储,也可以用下面代码的方法处理。
    考虑到Integer.MAX_VALUE的开方值为46340左右,所以num大于等于46341时,令max=46341,然后二分查找即可,避免溢出。 目前执行时间 0ms,beat 100%
class Solution {
    public boolean isPerfectSquare(int num) {
        if(num==1) return true;
        int min=0,max=0;
        int sqrt=0;
        if(num>=46341) max = 46341;
        else max=num;
        sqrt = (min+max)/2;
        
        while(sqrt*sqrt!=num ){
            if(min==max-1) return false;
            if(sqrt*sqrt>num) max = sqrt; 
            else  min = sqrt;
            sqrt = (max+min)/2;
        }
        return true;
    }
}

 

367. 有效的完全平方数

标签:als   一个   max   square   时间   利用   bool   左右   执行时间   

原文地址:https://www.cnblogs.com/chen-jack/p/9937632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!