当前位置:网站首页>LeetCode_二分搜索_简单_367.有效的完全平方数
LeetCode_二分搜索_简单_367.有效的完全平方数
2022-08-03 10:03:00 【小城老街】
1.题目
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
提示:
1 <= num <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-perfect-square
2.思路
(1)使用 Math.sqrt()
如果使用 Java 中内置的库函数 Math.sqrt() 的话,那么直接比较 (int)Math.sqrt((double) num) * (int)Math.sqrt((double) num) 与 num 是否相等即可。如果相等,则说明 num 是一个完全平方数;否则不则是。
(2)二分搜索
如果不使用任何内置的库函数的话,通过二分搜索的方法也可以进行判断。即我们需要在有序序列 [1 … num / 2] 中查找平方值为 num 的整数 mid,如果存在返回 true,否则返回 false。在使用二分搜索框架的过程中,本题有以下两点需要注意:
① 之所以搜索的右边界为 num / 2 而不是 num,主要目的在于缩小搜索区间,因为当正整数 num > 1 时,sqrt(num) ≤ num / 2;
② 在判断 mid 是否是 num 的算术平方根时,不能使用 mid * mid == num 进行判断,因为当 mid 大于 sqrt(Integer.MAX_VALUE) 时,前者会出现整数溢出的情况,从而影响判断。所以我们可以通过 mid == num / (double)mid 来进行判断。
3.代码实现(Java)
//思路1————使用 Math.sqrt()
class Solution {
public boolean isPerfectSquare(int num) {
return (int)Math.sqrt((double) num) * (int)Math.sqrt((double) num) == num;
}
}
//思路2————二分搜索
class Solution {
public static boolean isPerfectSquare(int num) {
if (num == 1) {
return true;
}
int left = 0;
int right = num / 2;
while (left <= right) {
int mid = left + (right - left) / 2;
// 如果使用 mid * mid 与 num 进行判断,前者可能会出现整数溢出的情况
if (mid == num / (double)mid) {
return true;
} else if (mid < num / (double)mid) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return false;
}
}
边栏推荐
猜你喜欢
随机推荐
Rabbit and Falcon are all covered, Go lang1.18 introductory and refined tutorial, from Bai Ding to Hongru, the whole platform (Sublime 4) Go lang development environment to build EP00
2022年起重机械指挥培训试题模拟考试平台操作
免费的mysql数据库管理工具_易语言快速导入MySQL数据库
文旅部:进一步加强旅游景区暑期安全管理工作
以网强算,中国移动算网建设激发澎湃能量
bihash总结
CRT命令按键
Validate floating point input
进入 SQL Client 创建 table 后,在另外一个节点进入 SQL Client 查询不到
QSplitter(分离部件)
MySQL 主从切换步骤
go泛型使用方法
The simplest base64 image stream in js realizes automatic download
MYSQL 修改时区的几种方法
Flink Yarn Per Job - 创建启动Dispatcher RM JobManager
ORA-06512 数字或值错误字符串缓冲区太小
Promise 2: Key Questions
mysqldump导出提示:mysqldump [Warning] Using a password on the command line interface can be insecure
cmd(命令行)操作或连接mysql数据库,以及创建数据库与表
梯度消失和梯度爆炸









