当前位置:网站首页>leetcode:319. 灯泡开关
leetcode:319. 灯泡开关
2022-08-09 22:01:00 【OceanStar的学习笔记】
题目来源
题目描述


题目解析
分析数据量
- 遍历不行

找规律
- 首先,对于第x个灯泡,它经过n轮,什么情况下它还亮着呢?
- 显然,对x做了奇数次的切换才能保证x是亮着的
- 所以,我们要做的是找到第几个位置的灯泡会做奇数次切换
- 那么,下一个问题:什么情况下会切换第x个灯泡的开关?
- 显然,当轮数k是x的约数时才会切换第x个灯泡的开关
- 比如,给定n为9,x为6。很明显,只有第1、2、3、6轮会切换第6个灯泡的开关,所以第6个灯泡是灭的,因为它做了偶数次切换。
- 而我们要找的是做了奇数次切换的灯泡,也就是约数个数为奇数的灯泡
- 于是问题转换为:在[1, n]内有多少个数,其约数的个数为奇数个。
- 结论:完全平方数的因数个数是奇数,非完全平方数因数个数为偶数。
- 比如当n为 36 时,它的因数有 (1,36), (2,18), (3,12), (4,9), (6,6), 可以看到前四个括号里成对出现的因数各不相同,括号中前面的数改变了灯泡状态,后面的数又变回去了,等于灯泡的状态没有发生变化,只有最后那个 (6,6),在次数6的时候改变了一次状态,没有对应其它的状态能将其变回去了,所以灯泡就一直是点亮状态的。所以所有平方数都有这么一个相等的因数对,即所有平方数的灯泡都将会是点亮的状态。
- 问题最终转换为:在 [1,n]中完全平方数的个数为多少。
class Solution {
public:
int bulbSwitch(int n) {
int res = 1;
while (res * res <= n) ++res;
return res - 1;
}
};

class Solution {
public:
int bulbSwitch(int n) {
return sqrt(n);
}
};
边栏推荐
- 聊天尬死名场面,你遇到过吗?教你一键获取斗图表情包,晋升聊天达人
- Install win virtual machine on VMware
- 2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day
- How to Make Your Company Content GDPR Compliant
- 17-GuliMall 搭建虚拟域名访问环境
- 国内手机厂商曾为它大打出手,如今它却最先垮台……
- 任务流执行器是如何工作的?
- Xiaohei leetcode's refreshing rainy day trip, just finished eating Yufei Beef Noodles, Mala Tang and Beer: 112. Path Sum
- 面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
- Flask's routing (app.route) detailed
猜你喜欢

Xiaohei's leetcode journey: 94. Inorder traversal of binary trees (supplementary Morris inorder traversal)

关于ETL的两种架构(ETL架构和ELT架构)

【服务器数据恢复】SAN LUN映射出错导致文件系统数据丢失的数据恢复案例

深度剖析 Apache EventMesh 云原生分布式事件驱动架构

Swift 需求 如何防止把view重复添加到win里面

十步以内,用小程序快速生成App!

Multiple reasons for MySQL slow query

Blender程序化建模简明教程【PCG】

任务流执行器是如何工作的?

MLOps的演进历程
随机推荐
unit test
每日一R「02」所有权与 Move 语义
十步以内,用小程序快速生成App!
国内手机厂商曾为它大打出手,如今它却最先垮台……
SecureCRT background color
Interviewer: How to deal with Redis big key?
Flask之路由(app.route)详解
Postgresql源码(68)virtualxid锁的原理和应用场景
力扣 1413. 逐步求和得到正数的最小值
mysql 、pg 查询日期处理
你真的了解乐观锁和悲观锁吗?
阿里云架构师金云龙:基于云XR平台的视觉计算应用部署
Analyze the Add() method in Fragment management from the source code
Xiaohei's leetcode journey: 94. Inorder traversal of binary trees (supplementary Morris inorder traversal)
Synchronization lock synchronized traces the source
跨端技术方案选什么好?
Technology Sharing | How to use the JSON Schema mode of interface automation testing?
[Implementation of the interface for adding, deleting, checking, and modifying a double-linked list]
开发者必备:一文快速熟记【数据库系统】和【软件开发模型】常用知识点
【测试】语句覆盖,判定覆盖,条件覆盖,路径覆盖