• 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);
        }
    };
    
  • 相关阅读:
    PHP发送邮件
    SQL删除字段及判断字段是否存在的方法
    密码MySQL的root的密码
    java socket 最简单的例子(server 多线程)
    php编写最简单的webservice
    SQL Server 存储过程与触发器
    手动创建最简单的JSP 文件
    Oracle 卸载步骤
    编写 WebService 程序
    eclipse 常用快捷键
  • 原文地址:https://www.cnblogs.com/clear-love/p/11339002.html
Copyright © 2020-2023  润新知