367. 有效的完全平方数 ——【Leetcode每日一题】

367. 有效的完全平方数

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 < = n u m < = 2 3 1 − 1 1 <= num <= 2^31 - 1 1<=num<=2311

思路:

法一:二分查找

  • 注意 num 最大可以取到 2 31 − 1 2^{31} - 1 2311,在该附近的数平方,会超出int的范围,要使用long

法二:观察法、等差数列

  • 平方序列: 1, 4, 9, 16, 25, …
  • 间隔: 3, 5, 7, 9, …

间隔为等差数列,使用这个特性可以得到从 1 开始的平方序列

代码:(Java、C++)

Java
法一:

public class IsPerfectSquare {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num = 16;
		System.out.println(isPerfectSquare(num));
	}
	
	public static boolean isPerfectSquare(int num) {

		long l = 1,h = num;
		long mid = 0;
		while(l <= h) {
			mid = l + (h - l) / 2;
			if(mid * mid == num) {
				break;
			}else if(mid * mid > num) {
				h = mid - 1;
			}else {
				l = mid + 1;
			}
		}
		return mid * mid == num;
    }
}

法二:

public static boolean isPerfectSquare(int num) {
		
	int addNum = 3;
	long sum = 1;
	while(sum < num) {
		sum += addNum;
		addNum += 2;
	}
	return sum == num;
}

C++
法一:

class IsPerfectSquare {
public:
	bool isPerfectSquare(int num) {
		long l = 1, h = num, mid;
		while (l <= h) {
			mid = l + (h - l) / 2;
			if (mid * mid == num) {
				break;
			}
			else if (mid * mid > num) {
				h = mid - 1;
			}
			else {
				l = mid + 1;
			}
		}
		return mid * mid == num;
	}
};

int main() {

	IsPerfectSquare i;
	int num = 16;

	cout << i.isPerfectSquare(num) << endl;

	system("pause");
	return 0;
}

法二:

class IsPerfectSquare {
public:
    bool isPerfectSquare(int num) {
		int addNum = 3;
		long sum = 1;
		while(sum < num) {
			sum += addNum;
			addNum += 2;
		}
		return sum == num;
    }
};

运行结果:

在这里插入图片描述
leetcode运行结果:
在这里插入图片描述

复杂度分析:

  • 时间复杂度:法一: O ( l o g ⁡ n ) O(log⁡n) O(logn);法二: O ( n ) O(\sqrt{n}) O(n )
  • 空间复杂度 O ( 1 ) O(1) O(1)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis框架源码笔记(九)之反射工具类解析

1 反射工具类 Java中的反射功能虽然强大&#xff0c;但是代码编写起来比较复杂且容易出错。Mybatis框架提供了专门的反射包&#xff0c;对常用的反射操作进行了简化封装&#xff0c;提供了更简单方便的API给调用者进行使用&#xff0c;主要的反射包代码结果如下&#xff1a; …

React 组件的 children 数据使用

children 属性表示该组件的子节点&#xff0c;只要组件内部有子节点&#xff0c;props 就有该属性&#xff0c;是自动带上的&#xff0c;不需要开发者添加。 children 可以是 普通文本、普通标签元素、函数、JSX … 案例一&#xff1a;普通文本 import React from "rea…

奇异值分解(SVD)和图像压缩

在本文中&#xff0c;我将尝试解释 SVD 背后的数学及其几何意义&#xff0c;还有它在数据科学中的最常见的用法&#xff0c;图像压缩。 奇异值分解是一种常见的线性代数技术&#xff0c;可以将任意形状的矩阵分解成三个部分的乘积&#xff1a;U、S、V。原矩阵A可以表示为&#…

数据结构与算法基础(王卓)(21):哈夫曼编码(1):过程

逻辑雏形 根据老师讲解的思路&#xff0c;梳理出程序运行的逻辑雏形如下&#xff1a; 搞一个多维数组HC&#xff0c;用来存储我们这里 n(每) 个节点的哈夫曼编码搞一个数组cd&#xff0c;用来存储我们这里每个节点是前面一位的左子树&#xff08;0&#xff09;还是右子树&…

Spark 基本知识介绍

文章目录1. Spark是什么2. Spark与Hadoop区别3. Spark四大特点3.1 速度快3.2 易于使用3.3 通用性强3.4 运行方式4. Spark整体框架5. Spark运行模式6. Spark架构角色6.1 YARN角色6.2 Spark 角色1. Spark是什么 Spark是用于大规模数据处理的统一分析引擎。 Spark 最早源于一篇论…

Qt5.15.2 for WebAssembly 环境搭建 - Windows篇

Qt系列文章目录 文章目录Qt系列文章目录前言一、准备工作二、操作步骤1.使用cmd工具2.安装Qt for WebAssembly3.创建工程WebAssembly3.创建Qt Assembly工程参考前言 由于前端Canvas绘制图像效率问题&#xff0c;而且实现三维特效也有性能瓶颈&#xff0c;虽然Web 技术突飞猛进…

基于Arm Cortex-M4核心MK60DN256VMD10、MK60DX256VMD10嵌入式微控制器芯片介绍

MK60DN256VMD10&#xff08;MK60DX256VMD10&#xff09;是Kinetis K6x系列32位微控制器&#xff0c;基于ArmCortex-M4核心&#xff0c;是与Kinetis Kx MCU家族兼容的引脚&#xff0c;外设和软件。K6x mcu还集成了10/100Mbps以太网与IEEE1588精确时间协议(PTP)收发器和USB 2.0 (…

【Linux-计算机网络】-TCP协议通信流程

1.TCP协议通信流程图 1.1TCP协议的通讯流程可以分为以下步骤&#xff1a; 应用层&#xff1a;应用程序通过系统调用API&#xff08;如socket&#xff09;创建一个TCP套接字&#xff08;socket&#xff09;&#xff0c;并设置好相关的选项。 传输层&#xff1a;当应用程序调用c…

再学C语言49:C库中的字符串函数

C库提供了很多处理字符串的函数&#xff1b;ANSI C用头文件 string.h 给出这些函数的原型 一、strlen()函数 功能&#xff1a;计算并返回字符串长度 示例代码&#xff1a; /* test strlen() function */ #include <stdio.h> #include <string.h>int main(void)…

数据的存储--->【大小端字节序】(Big Endian)(Little Endian)

⛩️博主主页&#xff1a;威化小餅干&#x1f4dd;系列专栏&#xff1a;【C语言】藏宝图&#x1f38f; ✨绳锯⽊断&#xff0c;⽔滴⽯穿&#xff01;一个编程爱好者的学习记录!✨前言计算机硬件有两种存储数据的方式&#xff1a;大端字节序——Big Endian小端字节序——Little …

【Python】【进阶篇】十、Python爬虫的Requests库

目录十、Python爬虫的Requests库10.1 常用请求方法10.1.1 requests.get()10.1.2 requests.post()10.2 对象属性10.3 Requests库应用十、Python爬虫的Requests库 Python 提供了多个用来编写爬虫程序的库&#xff0c;除了前面已经介绍的 urllib 库之外&#xff0c;还有一个很重的…

vue尚品汇商城项目-day07【44.个人中心二级路由搭建+45.我的订单+46.优化登录跳转+47.独享守卫】

文章目录44.个人中心二级路由搭建45.我的订单46.优化登录跳转47.独享守卫本人其他相关文章链接44.个人中心二级路由搭建 修改代码&#xff1a; 将Center拆分为2个组件MyOrderGroupOrder src/router/routes.js import Center from /pages/Center import GroupOrder from /pages…

QT 常见控件使用

1. QLineEdit 添加控件后&#xff0c;可以编辑控件的名称&#xff0c;然后使用名称获取和设置值 QString qstrValue ui->strName->text(); QMessageBox::information(this, "提示", qstrValue); 2.窗体导航切换 添加新的对话框&#xff0c;然后引入头文件…

游戏安全漏洞一些分享

安全界对漏洞的定义为&#xff1a;在硬件、软件、系统等具体实现或者系统安全策略上存在的缺陷&#xff0c;从而使攻击者能够达到于某种破坏效果。游戏安全漏洞属于常规漏洞的子类&#xff0c;常规漏洞的分类如下图所示&#xff1a; 通过以上的漏洞分类图可知游戏漏洞属于常规…

MATLAB | 如何绘制github同款日历热力图

应粉丝要求&#xff0c;出一个类似于github热图的日历热力图&#xff0c;大概长这样&#xff1a; 依旧工具函数放在文末&#xff0c;如有bug请反馈并去gitee下载更新版。 使用教程 使用方式有以下几种会慢慢讲到&#xff1a; heatmapDT(Year,T,V)heatmapDT(Year,T,V,MonLim)h…

被称为“眼黄金”的叶黄素究竟是什么?叶黄素则能过滤蓝光

人眼视觉依赖于黄斑的中心凹陷。黄斑中含有大量的叶黄素&#xff0c;因此被称为“黄斑”。叶黄素&#xff0c;也被称为“眼黄金”&#xff0c;是人类视网膜中最重要的营养物质。它含有黄斑&#xff08;视觉中心&#xff09;和晶状体&#xff0c;特别是黄斑中含有高浓度的叶黄素…

外部中断实验

基础知识及实验目标 目标&#xff1a;通过中断来实现按键对小灯的控制。 WK_UP 翻转小灯&#xff1b; KEY 1控制 DS1按一次亮&#xff0c;再按一次灭&#xff1b;KEY 0控制DS0&#xff0c;按一次亮&#xff0c;再按一次灭。 触发中断的意思就是&#xff1a;当这个IO口达到触发…

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

文章目录1 Mathtype安装2 word 段落间插入公式3 文字间嵌入&#xff08;内联&#xff09;公式4 公式修改5 不要使用键盘上的括号等符号5.1 键盘上符号引发的问题5.2 正确的符号使用方法6 常用设置6. 1公式字体大小设置6.2 公式样式设置7 公式标号设置8 MathType怎么设置下一章公…

ESP-C3入门18. 低功耗蓝牙SPP Server端功能测试

ESP-C3入门18. 低功耗蓝牙SPP Server端功能测试一、功能简介1. GATT2. SPP3. SPP Server和 SPP Client二、 SPP Server开发步骤1. 启动 GATT Server2. SPP 任务初始化3. 注册 SPP应用程序4. UART 初始化5. UART 事件处理程序二、完整程序1. 代码和注释2. 运行方法一、功能简介 …

【SQL 必知必会】- 第八课 使用函数处理数据

目录 函数 函数带来的问题 可移植&#xff08;portable&#xff09; 是否应该使用函数&#xff1f; 使用函数 文本处理函数 SOUNDEX 支持 日期和时间处理函数 数值处理函数 函数 函数带来的问题 与几乎所有DBMS 都等同地支持SQL 语句&#xff08;如SELECT&#xff09;不同&am…