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

Day37灯泡开关

初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭第二个。
第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换第 i 个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。
找出并返回 n 轮后有多少个亮着的灯泡。

在这里插入图片描述
超时。

class Solution {
    public int bulbSwitch(int n) {
        int[] arr = new int[n];
        int cnt = 1;
        int c = 0;
        while (cnt <= n) {
            for (int i = 0; i < n; i = i + cnt) {
                arr[i] = arr[i] == 0 ? 1 : 0;
            }
        }
        for (int i = 0; i < n; i++) {
            if (arr[i] == 1) {
                c++;
            }
        }
        return c;
    }
}
class Solution {
    public int bulbSwitch(int n) {
        return (int) Math.sqrt(n);
    }
}
关键观察:灯泡状态由其因子数量决定
对于灯泡 i,它会被切换的次数等于 i 的因子数量。例如:
灯泡 6 会在第 1、2、3、6 次被切换,因为 6 的因子是 1, 2, 3, 6。
灯泡 12 会在第 1、2、3、4、6、12 次被切换,因为 12 的因子是 1, 2, 3, 4, 6, 12。
每个灯泡的最终状态是开还是关,取决于它被切换的次数:

如果被切换的次数是 偶数次,则它最终会是关闭的。
如果被切换的次数是 奇数次,则它最终会是开启的。

需要找到小于等于 n 的完全平方数的个数,这样我们就可以知道最终有多少灯泡是开启的。
这个问题的核心就是:灯泡编号为完全平方数的灯泡,才会有奇数个因子,最终保持开启状态

http://www.kler.cn/a/456087.html

相关文章:

  • 常见网络攻击场景常被用于测试系统安全性
  • STM32高级物联网通信之以太网通讯
  • AEO海关认证的注意事项
  • 新品:SA628F39大功率全双工音频传输模块
  • EKF 自动匹配维度 MATLAB代码
  • rust windwos 两个edit框
  • vim多窗格
  • 访问网页的全过程
  • springmvc-拦截器-异常处理
  • [MySQL报错]关于发生net start mysql 服务无法启动,服务没有报告任何错误的五种解决方案。
  • 串口通信标准RS232、RS422、RS485有什么区别和不同
  • 哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?
  • HCIA笔记9--NAT、ACL与链路聚合
  • IDE 强大功能背后的 Language Server Protocol 详解
  • Python einops库介绍
  • uniapp中实现APP调用本地通知栏通知、震动、本地提示音或者mp3提醒
  • AMD | GPU | 深度学习 | 如何使用
  • 从零开始开发纯血鸿蒙应用之日志模块实现
  • Go语言的数据结构
  • 深度学习任务中的 `ulimit` 设置优化指南
  • clicbot可立宝编程 易错归纳笔记
  • 8086汇编(16位汇编)学习笔记03.汇编指令
  • SDL单设备登录
  • 面试241228
  • 公路边坡安全监测中智能化+定制化+全面守护的应用方案
  • 开发过程优化·自定义鼠标右键菜单