当前位置: 首页 > news >正文

LeetCode题练习与总结:灯泡开关--319

一、题目描述

初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭第二个。

第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换第 i 个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。

找出并返回 n 轮后有多少个亮着的灯泡。

示例 1:

输入:n = 3
输出:1 
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭]. 你应该返回 1,因为只有一个灯泡还亮着。

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:1

提示:

  • 0 <= n <= 10^9

二、解题思路

  1. 分析规律:观察每一轮灯泡的状态变化,可以发现,一个灯泡的状态变化次数取决于它的编号有多少个不同的因数。例如,编号为6的灯泡,在第1轮、第2轮、第3轮和第6轮会被切换,因为6有4个因数(1, 2, 3, 6)。如果一个灯泡的编号有奇数个因数,那么它最终会是亮着的;如果有偶数个因数,那么它最终会是关闭的。

  2. 数学规律:一个数的因数通常是成对出现的,除了完全平方数。例如,4的因数有1、2、4,其中2出现了两次。因此,一个数如果是一个完全平方数,那么它就有奇数个因数。

  3. 结论:经过n轮后,亮着的灯泡数量等于不大于n的完全平方数的数量。

基于以上思路,我们可以直接计算不大于n的完全平方数的数量,即计算从1到n的每个数,判断它是否是完全平方数。

三、具体代码

class Solution {public int bulbSwitch(int n) {// 初始化亮着的灯泡数量int count = 0;// 从1开始,计算每个数的平方,直到平方数大于nfor (int i = 1; i * i <= n; i++) {count++;}return count;}
}

四、时间复杂度和空间复杂度

1. 时间复杂度

该算法中,我们有一个循环,循环的条件是 i * i <= n。这意味着循环将执行直到 i 的平方大于 n。换句话说,循环将执行大约 sqrt(n) 次,因为 i 的值将从 1 增长到 sqrt(n)

因此,该算法的时间复杂度是 O(√n)。

2. 空间复杂度

该算法中,我们使用了一个整型变量 count 来计数亮着的灯泡数量,以及一个整型变量 i 作为循环的迭代器。这两个变量都是常数空间,不随输入 n 的大小而变化。

因此,算法的空间复杂度是 O(1),表示算法使用了固定数量的额外空间。

五、总结知识点

  1. 类定义(Class Definition):代码中定义了一个名为 Solution 的类,这是面向对象编程的基础。

  2. 方法定义(Method Definition):在 Solution 类中定义了一个公共方法 bulbSwitch,它接受一个整数参数 n 并返回一个整数,这是函数式编程的一个特点。

  3. 变量声明与初始化(Variable Declaration and Initialization):使用 int count = 0; 声明并初始化了一个整型变量 count,用于计数。

  4. 循环结构(Loop Structure):使用了一个 for 循环,这是控制流语句的一种,用于重复执行代码块。

  5. 算术运算(Arithmetic Operations):在循环条件中使用了乘法运算符 * 来计算 i 的平方,并与 n 进行比较。

  6. 逻辑运算(Logical Operations):循环条件 i * i <= n 使用了小于等于 (<=) 的逻辑运算符来确定循环的继续条件。

  7. 增量运算(Increment Operation):在 for 循环的末尾,使用 i++ 对变量 i 进行自增操作,这是常见的编程技巧。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

相关文章:

LeetCode题练习与总结:灯泡开关--319

一、题目描述 初始时有 n 个灯泡处于关闭状态。第一轮&#xff0c;你将会打开所有灯泡。接下来的第二轮&#xff0c;你将会每两个灯泡关闭第二个。 第三轮&#xff0c;你每三个灯泡就切换第三个灯泡的开关&#xff08;即&#xff0c;打开变关闭&#xff0c;关闭变打开&#x…...

ClickFix攻击活动升级:可通过虚假谷歌会议画面传播恶意软件

最近&#xff0c;研究人员报告了一种新的 ClickFix 攻击活动&#xff0c;主要通过诱骗用户访问显示虚假连接错误的欺诈性 谷歌会议的页面&#xff0c;继而借此传播信息窃取恶意软件&#xff0c;主要针对 Windows 和 macOS 操作系统。 ClickFix是网络安全公司Proofpoint在5月份…...

迷茫!能走出迷茫?

我今年40有余&#xff0c;因资质平庸&#xff0c;及特殊的个人经历&#xff0c;仍奋斗在一线。上班近二十年&#xff0c;两件事对我人生走向影响最大&#xff0c;编程和炒股。 下个月要去一家新公司上班。今天算是在现公司工作交接的最后时段。在这家公司干了接近一年&#xff…...

6.2 遍历重定位表

本节我们将编写一个遍历重定位表的示例程序&#xff0c;打印重定位表。 本节必须掌握的知识点&#xff1a; 遍历重定位表 6.2.1 遍历重定位表 实验四十三&#xff1a;遍历重定位表 以下代码实现打印"c:\\notepad64.exe"进程重定位表的所有信息。 /*--------------…...

面对服务器掉包的时刻困扰,如何更好的解决

在数字化时代&#xff0c;服务器的稳定运行是企业业务连续性的基石。然而&#xff0c;服务器“掉包”现象&#xff0c;即数据包在传输过程中丢失或未能正确到达目的地的情况&#xff0c;却时常成为IT运维人员头疼的问题。它不仅影响用户体验&#xff0c;还可能导致数据不一致、…...

RTSP流图片采样助手(yolov5)

在监控和视频分析领域&#xff0c;实时采样视频流中的图像数据是十分重要的。本文将介绍一个基于Python和Tkinter构建的RTSP流图片采样助手的设计与实现&#xff0c;旨在简化RTSP流的采样过程&#xff0c;并支持根据用户定义的特殊标签进行筛选。 项目概述 该项目的主要功能包…...

MySQL、MariaDB、OceanBase远程异地定时备份脚本

问题背景 公司需要在异地机房远程备份数据库&#xff0c;以防止数据丢失&#xff0c;同时要支持MySQL、MariaDB和OceanBase。由于MariaDB和OceanBase支持MySQL语法&#xff0c;所以可以直接用MySQL Client进行备份。 安装MySQL客户端 yum install mysql编写脚本 编写/backu…...

【远程监控新体验】OpenObserve结合内网穿透无公网IP远程访问全攻略

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动OpenObserve容器4. 本地访问测试5. 公网访问本地部署的OpenObserve5.1 内网穿透工具安装5.2 创建公网地址6. 配置固定公网地址前言 本文主要介绍如何在Linux系统使用Docker快速本地化部署OpenObserve云原生可观…...

深度学习:异常检测(Anomaly Detection)详解

异常检测&#xff08;Anomaly Detection&#xff09;详解 异常检测&#xff0c;也称为离群点检测&#xff0c;是一种用于识别在数据中显著偏离正常行为或预期模式的数据点的技术。这些异常数据点可能代表系统错误、欺诈行为、网络入侵或任何其他重要且通常需要进一步调查的现象…...

智慧公厕系统提升公共服务满意度

在现代城市化进程中&#xff0c;公共服务体系的完善与提升成为了政府和社会各界的重要任务。作为公共厕所这样一个普遍而基础的市政设施&#xff0c;其服务质量直接影响到市民的生活品质和城市形象。近年来&#xff0c;智慧公厕系统的引入逐渐成为提升公共服务满意度的重要手段…...

幼儿和青少年编程学习路径

1. 引言 编程在现代教育中的重要性 随着信息时代的来临&#xff0c;编程不再是一个小众技能&#xff0c;而是成为未来社会各行业的重要基础能力。从计算机科学到人工智能&#xff0c;再到数据科学和软件工程&#xff0c;编程技能无疑是未来全球经济的核心驱动力之一。越来越多…...

leetcode48:旋转矩阵

题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5…...

安装CentOS 8镜像和创建CentOS 8虚拟机教程

一、安装虚拟机 网上查找教程&#xff0c;我用的是VMware 17 二、下载CentOS 8镜像 1.阿里云下载CentOS 8镜像 centos安装包下载_开源镜像站-阿里云 (aliyun.com) 选择需要下载的版本&#xff0c;(建议)下载dvd1版本的iso&#xff08;也有下载boot版本的iso&#xff0c;创…...

针对考研的C语言学习(二叉树专题)

二叉树层次建树 对于二叉树&#xff0c;建树过程中需要一个&#xff08;尾插法的&#xff09;链表&#xff08;或队列&#xff09;来辅助确认当前父亲节点 由于尾插法需要一个尾指针。因此可以理解为队列&#xff0c;只不过是不带头结点的链表版队列。 但其实就是一个辅助找…...

【ARM 嵌入式 编译系列 10.9 -- Clang 编译器】

> ARM GCC 编译精讲系列课程链接 < 文章目录 Clang 编译器详细介绍Clang 主要特点Clang 许可协议Clang 与 GCC 主要差异Clang 使用示例Summary Clang 编译器详细介绍 Clang 是一个由 LLVM 项目开发的编译器前端&#xff0c;支持 C、C、Objective-C 和 Objective-C 等编程…...

《深度学习》【项目】自然语言处理——情感分析 <上>

目录 一、项目介绍 1、项目任务 2、评论信息内容 3、待思考问题 1&#xff09;目标 2&#xff09;输入字词格式 3&#xff09;每一次传入的词/字的个数是否就是评论的长度 4&#xff09;一条评论如果超过32个词/字怎么处理&#xff1f; 5&#xff09;一条评论如果…...

RU19.25 Standalone (GI和DB分开打)

参考文档&#xff1a;Patch 36916690 - GI Release Update 19.25.0.0.241015 2.1.1.1 OPatch Utility Information 12.2.0.1.42 or later 2.1.1.2 Validation of Oracle Inventory 分别在GI和Oracle Home下执行 $ <ORACLE_HOME>/OPatch/opatch lsinventory -detail -o…...

探索 Jupyter 核心:nbformat 库的神秘力量

文章目录 探索 Jupyter 核心&#xff1a;nbformat 库的神秘力量1. 背景介绍&#xff1a;为何选择 nbformat&#xff1f;2. nbformat 是什么&#xff1f;3. 如何安装 nbformat&#xff1f;4. 简单的库函数使用方法4.1 读取 Notebook 文件4.2 修改 Notebook 中的单元格4.3 添加 M…...

python+大数据+基于spark的短视频推荐系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…...

Elasticsearch字段数据类型

1. 前言 ES文档的每个字段都至少有一个数据类型&#xff0c;此类型决定了字段值如何被存储以及检索。例如&#xff0c;字符串类型可以定义为text或者keyword&#xff0c;前者用于全文检索&#xff0c;会经过分词后索引&#xff1b;后者用于精准匹配&#xff0c;值会保持原样被…...

3分钟快速上手:免费城通网盘解析器终极指南

3分钟快速上手&#xff1a;免费城通网盘解析器终极指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载慢、广告多而烦恼吗&#xff1f;城通网盘解析器正是解决这些问题的利器&#…...

解密微信小程序逆向工程:3种核心方法深度解析wxappUnpacker

解密微信小程序逆向工程&#xff1a;3种核心方法深度解析wxappUnpacker 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序逆向工程工具wxappUnpacker为开发者提供了一套完整的源码还原解决方案&#xff0c;能…...

Pixel Dimension Fissioner 实战项目:复刻“黑马点评”首页视觉设计

Pixel Dimension Fissioner 实战项目&#xff1a;复刻"黑马点评"首页视觉设计 1. 开场白&#xff1a;当AI遇见UI设计 最近在设计师圈子里有个热门话题&#xff1a;如何用AI工具提升UI设计效率。作为从业多年的设计老鸟&#xff0c;我一直在寻找能真正帮到设计师的智…...

图片旋转判断在智能相册中的创新应用

图片旋转判断在智能相册中的创新应用 1. 引言 你有没有遇到过这样的情况&#xff1f;翻看手机相册时&#xff0c;发现有些照片莫名其妙地歪了&#xff0c;需要手动一张张旋转校正。特别是那些横屏拍摄的照片&#xff0c;在手机竖屏查看时总是需要歪着头看&#xff0c;体验特别…...

CH343芯片驱动安装全攻略:从Windows到Linux再到MacOS,一篇搞定所有系统

CH343芯片跨平台驱动安装实战指南&#xff1a;从Windows到Linux再到MacOS的完整解决方案 第一次拿到基于CH343芯片的开发板时&#xff0c;我对着电脑上"无法识别的USB设备"提示发呆了十分钟。作为一款支持6Mbps高速传输的USB转串口芯片&#xff0c;CH343在嵌入式开发…...

MVT协议深度解析:从Protobuf编码到GISBox实战,看它如何碾压传统栅格瓦片

MVT协议技术内幕&#xff1a;从二进制编码到百万级数据渲染实战 当我们打开手机地图App&#xff0c;双指放大查看小区楼栋轮廓时&#xff0c;很少有人会思考这流畅体验背后的技术革命。传统栅格瓦片就像打印在纸上的地图&#xff0c;放大后必然出现马赛克&#xff1b;而MVT协议…...

OpenClaw智能截图工具:Qwen3-14b_int4_awq自动识别图片内容并分类保存

OpenClaw智能截图工具&#xff1a;Qwen3-14b_int4_awq自动识别图片内容并分类保存 1. 为什么需要智能截图工具&#xff1f; 作为一名经常需要收集研究资料的技术博主&#xff0c;我长期被一个问题困扰&#xff1a;每次截取大量图片后&#xff0c;总需要手动整理、重命名和分类…...

从 Apache SeaTunnel 走向 ASF Member:一位开发者的长期主义样本悔

一、中间件是啥&#xff1f;咱用“餐厅”打个比方 想象一下&#xff0c;你的FastAPI应用是个高级餐厅。 ?? 顾客&#xff08;客户端请求&#xff09;来到门口。- 迎宾&#xff08;CORS中间件&#xff09;&#xff1a;先看你是不是从允许的街区&#xff08;域名&#xff09;来…...

STM32 RTC掉电也能走时?手把手教你用VBAT和LSE晶振搭建硬件时钟电路

STM32 RTC掉电也能走时&#xff1f;手把手教你用VBAT和LSE晶振搭建硬件时钟电路 嵌入式系统中实时时钟&#xff08;RTC&#xff09;的重要性不言而喻&#xff0c;它不仅是记录时间的工具&#xff0c;更是许多关键功能的基石。想象一下&#xff0c;当你的智能门锁因为断电而无法…...

ConvertToUTF8终极指南:彻底解决Sublime Text编码乱码问题

ConvertToUTF8终极指南&#xff1a;彻底解决Sublime Text编码乱码问题 【免费下载链接】ConvertToUTF8 A Sublime Text 2 & 3 plugin for editing and saving files encoded in GBK, BIG5, EUC-KR, EUC-JP, Shift_JIS, etc. 项目地址: https://gitcode.com/gh_mirrors/co…...