zoukankan      html  css  js  c++  java
  • leetcode 灯泡开关

    初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。

    示例:

    输入: 3
    输出: 1
    解释:
    初始时, 灯泡状态 [关闭, 关闭, 关闭].
    第一轮后, 灯泡状态 [开启, 开启, 开启].
    第二轮后, 灯泡状态 [开启, 关闭, 开启].
    第三轮后, 灯泡状态 [开启, 关闭, 关闭].

    你应该返回 1,因为只有一个灯泡还亮着。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/bulb-switcher

    算法一:模拟,过不了大数据,TLE

    class Solution {
    public:
        int bulbSwitch(int n) {
            int a[n+1];
            for(int i=1;i<=n;++i){
                a[i]=0;
            }
            for(int i=1;i<=n;++i){
                for(int j=i;j<=n;j+=i){
                    a[j]^=1;
                }
            }
            int ans=0;
            for(int i=1;i<=n;++i){
                if(a[i])ans++;
            }
            return ans;
        }
    };
    

    算法二:数学思想,我们换个角度去观察一个灯泡,发现只有被按奇数次的才能最后亮着,那么被按奇数次的灯泡编号有什么特征,若编号为4,则在第1,2,4轮被按过,可以知道平方数的约数是奇数个,所以我们只需要计算出有多少个完全平方数,我们只需要对n开方下取整就可以得出答案。

    class Solution {
    public:
        int bulbSwitch(int n) {
            return sqrt(n);
        }
    };
    
  • 相关阅读:
    @Order
    uri和url , 以及末尾加不加 '/'
    windows删除右键新建多余选项
    Typora 指南
    常见状态码/HttpStatusCode
    final 修饰符
    4. shiro-整合redis
    springboot 整合mybatis 一级缓存失效
    springboot查看具体访问的url片段
    JavaSE:NIO
  • 原文地址:https://www.cnblogs.com/clear-love/p/11339002.html
Copyright © 2011-2022 走看看