367.有效的完全平方数(力扣LeetCode)

367.有效的完全平方数

题目描述

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。

完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。

不能使用任何内置的库函数,如 sqrt 。

示例 1:

输入:num = 16
输出:true
解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。

示例 2:

输入:num = 14
输出:false
解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。

提示:

  • 1 <= num <= 231 - 1

浮点数二分

因为在二分查找结束后,r 保存了逼近的平方根值,所以r*r要强制类型转换为int类型

// 定义解决问题的类 Solution
class Solution {
public:// 判断正整数 num 是否为完全平方数的函数bool isPerfectSquare(int num) {// 设置二分查找的范围,从0到numdouble l = 0, r = num;// 使用二分查找来逼近平方根的值// 当左右边界的差距小于1e-6时停止查找// 这里的1e-6是一个小的阈值,用于控制查找精度while (r - l >= 1e-6) {// 计算中点值double mid = (r + l) / 2;// 如果 mid 的平方大于或等于 num,更新右边界 rif (mid * mid >= num) r = mid;// 否则,更新左边界 lelse l = mid;}// 如何判断一个数是完全平方数?// 一个数如果是完全平方数,其平方根一定是整数。// 在二分查找结束后,r 保存了逼近的平方根值,// 将其强制转换成整数然后再平方,看是否等于原始数值 num。// 如果相等则表示 num 是完全平方数,返回 true// 否则表示 num 不是完全平方数,返回 falseif ((int)r * (int)r == num) return true;return false;}
};

整数二分

因为当 mid 为 46341 或更大时,mid * mid 的结果会超过 int 类型能表示的最大值,从而导致溢出,所以需要long long来防止溢出

// 定义解决问题的类 Solution
class Solution {
public:// 函数用来判断 num 是否为完全平方数bool isPerfectSquare(int num) {// 使用 long long 类型来避免在计算过程中可能出现的整数溢出long long l = 0;long long r = num;// 使用二分查找算法来确定是否存在整数 n 使得 n*n == numwhile (l < r) {// 计算中间值,注意这里为了运算符优先级,先进行加法操作,再进行右移一位操作以除以2// 右移运算符具有比加法更高的优先级,所以必须确保加法在右移之前执行long long mid = (r + l) >> 1;// 如果 mid 的平方大于或等于 num,那么需要在左侧区间 [l, mid] 中继续查找if (mid * mid >= num) {r = mid;} // 如果 mid 的平方小于 num,那么需要在右侧区间 [mid+1, r] 中继续查找else {l = mid + 1;}}// 经过上面的循环,如果 num 是完全平方数,则 l (或 r) 将等于 num 的平方根// 检查 l 的平方是否等于 num 来确定 num 是否为完全平方数if (l * l == num) return true;// 如果 l 的平方不等于 num,则说明 num 不是完全平方数return false;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【江科大】STM32:I2C通信外设(硬件)

在将2C通信外设之前&#xff0c;我们先捋一捋&#xff0c;串口的相关特点来和I2C进行一个对北比。 首先&#xff1a; 1,大部分单片机&#xff0c;设计的PCB板均带有串口通信的引脚&#xff08;也就是通信基本都借助硬件收发器来实现&#xff09; 2.对于串口的异步时序&#xff…

后端系统缓存技术分析

缓存有很多种&#xff0c;如CPU 缓存、磁盘缓存、浏览器缓存等&#xff1b;本文主要针对后端系统的缓存&#xff0c;也就是将程序或系统经常要使用的对象存在内存中&#xff0c;以便在使用时可以快速调用&#xff0c;避免加载数据或者创建重复的实例&#xff0c;以达到减少系统…

韩国访问学者申请注意事项

随着国际交流的增加&#xff0c;韩国成为许多学者追求学术深造的热门目的地之一。如果你计划成为一名韩国访问学者&#xff0c;以下是知识人网小编整理的一些需要注意的事项&#xff0c;以确保你的申请顺利进行。 1.详细了解目标学府&#xff1a;在开始申请之前&#xff0c;仔细…

Python进阶——文件及IO操作

一、文件的基本操作 创建文件对象和打开文件对象&#xff1a;open() def my_write():#(1)打开&#xff08;创建&#xff09;文件fileopen(Myqq.txt,w,encodingutf-8) #如果文件不存在&#xff0c;则在当前目录下创建一个文件名字为Myqq.txt#&#xff08;2&#xff09;操作文件f…

redis整合

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 1、Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以…

matlab绘图杂谈-stem函数和plot函数

出发点 今天在论文中看到一副这样的图&#xff0c;它既有曲线&#xff0c;又有点&#xff0c;并且对两者都添加了图例。三条曲线应该是用plot函数绘制的&#xff0c;而target哪个绿色的圆圈&#xff0c;我的理解是用stem函数绘制的。它只是1个点&#xff0c;并且没有竖线&…

Linux文件管理技术实践

shell shell的种类(了解) shell是用于和Linux内核进行交互的一个程序&#xff0c;他的功能和window系统下的cmd是一样的。而且shell的种类也有很多常见的有c shell、bash shell、Korn shell等等。而本文就是使用Linux最常见的bash shell对Linux常见指令展开探讨。 内置shell…

ElasticSearch搜索引擎入门到精通

ES 是基于 Lucene 的全文检索引擎,它会对数据进行分词后保存索引,擅长管理大量的数据,相对于 MySQL 来说不擅长经常更新数据及关联查询。这篇文章就是为了进一步了解一下它,到底是如何做到这么高效的查询的。 在学习其他数据库的时候我们知道索引是一个数据库系统极其重要…

【基础配置】Python2/Python3并存安装配置教程

Nx01 产品简介 Python是一种高级的、解释型的、面向对象的通用编程语言&#xff0c;具有简单易学、代码可读性强、功能强大、可移植性好等特点。它可以应用于多种领域&#xff0c;如Web开发、数据科学、人工智能、机器学习、科学计算、自动化测试等。Python由Guido van Rossum于…

如何使用phpStudy软件测试本地PHP及环境搭建

各位同学朋友们大家好&#xff01;我是咕噜铁蛋&#xff01;我们经常需要在本地进行PHP代码的开发和测试。而phpStudy作为一个集成了Apache、MySQL和PHP的软件套装&#xff0c;提供了方便快捷的环境搭建和测试工具。今天铁蛋为大家详细介绍如何使用phpStudy来测试本地PHP及环境…

gradle源

腾讯源 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-xxx-bin.zip阿里云 https://developer.aliyun.com/mvn/guide maven { url http://maven.aliyun.com/nexus/content/groups/public/ }maven { url https://maven.aliyun.com/repository/google }mave…

【cuda】RuntimeError: Unexpected error from cudaGetDeviceCount()

解决 会发现 nvidia-smi 不管用了。不要立即重启&#xff0c;会黑屏的。赶紧记录使用的驱动版本号&#xff0c;最好找到安装包位置。 直接重装原版驱动&#xff0c;环境还能用。 参考我的安装博客。 已经黑屏就进入安全模式&#xff0c;network模式。卸载可视化桌面和显卡驱动…

雨云服务器部署幻兽帕鲁PalWorld联机服务器详细教程

幻兽帕鲁是Pocketpair开发的一款开放世界生存制作游戏&#xff0c;游戏中&#xff0c;玩家可以在广阔的世界中收集神奇的生物“帕鲁”&#xff0c;派他们进行战斗、建造、做农活&#xff0c;工业生产等。 最近&#xff0c;这款游戏挺火&#xff0c;为了获得更好的游戏体验&…

SpringBoot中Redis解决LocalDateTime序列化与反序列化不一致问题

前言 在SpringBoot应用中&#xff0c;数据的序列化和反序列化是关键环节。然而&#xff0c;对于LocalDateTime类型的数据&#xff0c;有时会遇到序列化与反序列化不一致的问题。这主要是由于不同的时区或格式差异所导致。为了解决这一问题&#xff0c;我们可以借助Redis的强大功…

手搓 国内首个非Attention大模型,训练效率7倍于Transformer

手搓 国内首个非Attention大模型,训练效率7倍于Transformer 非Attention大模型代码解析非Attention大模型代码 import torchclass FeedForward(torch.nn.Module):def __init__(self, hidden_dim):super

爬虫工作量由小到大的思维转变---<第四十章 Scrapy Redis 实现IP代理池管理的最佳实践>

前言: 本篇是要结合上篇一起看的姊妹篇:爬虫工作量由小到大的思维转变---&#xff1c;第三十九章 Scrapy-redis 常用的那个RetryMiddleware&#xff1e;-CSDN博客 IP代理池的管理对于确保爬虫的稳定性和数据抓取的匿名性至关重要。围绕Scrapy-Redis框架和一个具体的IP代理池中…

Vue构建项目断点调试过程问题总结

Vue构建项目断点调试过程问题总结 问题背景 前端开发过程中&#xff0c;碰到问题时需要debug&#xff0c;快速分析和解决问题。一般除了console.log的方式打印日志外&#xff0c;更方便直观的方式就是打断点debug。本文对vue项目debug过程可能碰到的问题进行总结&#xff0c;…

“数据同步大揭秘:Canal工具如何让实时处理变得轻而易举?“

介绍&#xff1a;Canal是一个基于MySQL数据库增量日志解析的开源数据同步工具。 Canal的主要功能是提供增量数据订阅和消费&#xff0c;它通过解析MySQL数据库的增量日志来捕获数据变更事件&#xff0c;并将这些事件转换成数据变更流&#xff0c;供用户订阅和消费。这样&#x…

魔法少女LJJ 题解

推荐在 cnblogs 上阅读 魔法少女LJJ 题解 这题纯属就是迷惑题。。 为什么这么说&#xff1f; 注意数据范围&#xff1a; 对 100% 的数据 0 ≤ m ≤ 400000 0\leq m\leq400000 0≤m≤400000&#xff0c; c ≤ 7 c\leq 7 c≤7。 c ≤ 7 c\leq 7 c≤7&#xff01;&#xff01…

Deepin基本环境查看(四)【硬盘/分区、文件系统、硬连接/软连接】

Linux操作系统(Deepin、Ubuntu&#xff09;操作系统中&#xff0c;硬盘分区的管理与Windows操作系统不同&#xff1b; 在Linux系统中维护着一个统一的文件目录体系&#xff0c;而硬盘和分区是以资源的形式由操作系统挂接和调度&#xff1b;此外Linux系统中连接&#xff08;硬连…