版权声明:本文未经允许不得转载 https://blog.csdn.net/weixin_43873349/article/details/89501640
leetcode c++ 367 有效的完全平方数
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
开始时想的很简单,直接从头遍历到给定的数,穷举,看是否有数的平方等于给定的数,如果有就返回true,没有就返回false。运行报错,int改为long后通过,但是内存占用很大。
进行改进,看到其他文章用了二分法就尝试了一下,内存击败了93%用户。
思路:将正常的二分法应用于此,循环,每次取中间值,如果中间值的平方==给定的数,那么返回true。否则缩小范围继续二分。循环结束如未找到平方等于给定数的数,那么返回false。
下面贴上代码:
class Solution {
public:
bool isPerfectSquare(int num) {
long left = 1;
long right = num;
long mid;
while(left <= right){
mid = (left + right) / 2;
if(mid * mid == num){
return true;
} else if(mid * mid > num){
right = mid - 1;
} else {
left = mid + 1;
}
}
return false;
}
};