标签: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; } }
标签:als 一个 max square 时间 利用 bool 左右 执行时间
原文地址:https://www.cnblogs.com/chen-jack/p/9937632.html