0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

有趣的算法题热热身:灯泡开关

算法与数据结构 来源:牛牛码特 作者:牛牛码特 2022-06-16 09:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

计算机基础和算法是能否拿到一个好offer的关键因素,月底牛牛就忙完手上项目了,到时也会多分享相关内容,今天就先整一道LeetCode上有趣的算法题热热身:灯泡开关。 01故事起源

初始时有 n 个灯泡,均处于关闭状态。

对某个灯泡切换开关意味着:如果灯泡状态为关闭,那该灯泡就会被开启;而灯泡状态为开启,那该灯泡就会被关闭。

第 1 轮,每个灯泡切换一次开关。即打开所有的灯泡。

第 2 轮,每两个灯泡切换一次开关。即每两个灯泡关闭后一个。

第 3 轮,每三个灯泡切换一次开关。即位于第3、6、9···的灯泡切换开关。

第 i 轮,每 i 个灯泡切换一次开关。而第 n 轮,你只切换最后一个灯泡的开关。

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

示例 1:

2e2f0c3e-ed13-11ec-ba43-dac502259ad0.png

输入:n = 6 输出:2

02问题分析

通过上面的图例,我们可以很清楚地看到,每一轮都会切换一批灯泡。关键是可能切换到之前已经切换过的灯泡,如果我们通过模拟来暴力解决,那么每一轮就要遍历一次,肯定超时。

那我们换种思路想想,这道题似乎更像一道有数学规律的题,这种类型在面试中也不少见。

不过我们不一定能马上找到规律,那也不要着急,就按部就班:用0表示off, 1表示on,先列出前10个灯泡的答案,看看其中有什么规律可循。

n=1:1

n=2:1 0

n=3:1 0 0

n=4:1 0 0 1

n=5:1 0 0 1 0

n=6:1 0 0 1 0 0

n=7:1 0 0 1 0 0 0

n=8:1 0 0 1 0 0 0 0

n=9:1 0 0 1 0 0 0 0 1

n=10: 1 0 0 10 0 0 0 1 0

03发现规律

我们仔细看看上面的数据就会发现,最后亮灯的位置都在第1、4、9位上,这些位置恰好都是某个因子的平方,比如4,就是2的平方,不知道大家还记得不,在数学上这种数字就叫做完全平方数

那我们就可以大胆猜测:最后亮灯的位置,都是完全平方数。那么每多一个完全平方数,就多一个亮的灯泡。

当然,这只是一个猜测,我们可以用暴力法写一个程序,把前100个的情况打印出来,就能看出,是满足这个规律的。

都已经验证到100轮了,那么基本就是这个规律了。

所以这道题,其实就是寻找n以内有多少个完全平方数,具体做法是从数字1遍历到数字n,对每个数字判断是否是完全平方数,最差也是O(n)可以解决。

04思考缘由

牛牛是个打破砂锅问到底的人,虽然通过规律,解决了问题,但是不搞清楚为什么,总是心里痒痒的。

我们从上面的规律,可以猜测灯泡亮的数量一定和平方根的特性有关系的。

我们先看看一些非完全平方数:

8的因子: 1 2 4 8;

12的因子:1 2 3 4 6 12;

这些因子一定是偶数个,为什么呢?

因为一个因子,一定是和另一个因子,配合起来,才能得到这个数字。

回到我们的灯泡,比如我们拿n=3的情况来说,第一轮打开了第三轮的灯泡,第三轮就会给它关掉,因为1、3是3的成对因子。

但如果是n=4的情况,1、4虽然也会成对抵消,但是第二轮的操作却无法抵消,因为2的成对因子是2,不会再重复出现。

从这里我们就可以看出来,每增加一个完全平方数,就会多一个不会被抵消掉的因子出现,所以个数也就增加了1。

05更进一步

一般的算法题,O(n)就是性能的极致,但这是一道数学规律题,那我们就得多想想还有没有更快的办法。

要找到有多少个完全平方数,是否一定要遍历完1-n?

稍微思考下就可以发现并不是,拿9举个:3是9的完全平方因子,在3以上的数字一定不能构成完全平方因子,因为开平方一定超过最大数字9了。如此一来,我们只用考虑3之前的。

不难发现,3之前的1、2是必然满足完全平方因子的,因为它们做平方,一定小于3的平方,也就一定在数据范围内。

基于上面的分析,我们可以看出,灯泡亮的个数,就是n的平方根向下取整个,代码就一行:

return (int)Math.sqrt(n)

06灯泡复盘其实在面试中,遇到这种数学模型的题,是很容易翻车的。如果只是干想,在面试紧张的环境下,很可能大脑一片空白。 不过,这种题的套路也是有的,基本都可以用先实验,再猜测,再论证的方式去解决,这个不仅仅是面试套路,也是一种很优秀的做事情的模式。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4760

    浏览量

    97137
  • 程序
    +关注

    关注

    117

    文章

    3836

    浏览量

    84760

原文标题:LC319:灯泡开关

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    芯片热特性的热阻描述

    热阻(Thermal Resistance)表示热量在传递过程中所受到的阻力,为传热路径上的温差与热量的比值。根据传热方式的不同,热阻又分为导热热阻、对流换热热阻和辐射换热热阻。
    的头像 发表于 11-27 09:28 1448次阅读
    芯片热特性的热阻描述

    【精选直播】openDACS 2025 开源EDA与芯片大赛 赛五 赛七 直播宣讲会

    openDACS2025开源EDA与芯片大赛线上宣讲赛五:芯片大模型Finetune11月11日(周二)19:30精彩开播|宣讲信息报告题目赛宣讲:芯片大模型Finetune宣讲嘉宾王颖
    的头像 发表于 11-11 08:08 421次阅读
    【精选直播】openDACS 2025 开源EDA与芯片大赛 赛<b class='flag-5'>题</b>五 赛<b class='flag-5'>题</b>七 直播宣讲会

    【精选直播】openDACS 2025 开源EDA与芯片大赛 赛六 赛三 直播宣讲会

    openDACS2025开源EDA与芯片大赛线上宣讲赛六:从Verilog到网表:电路的PPA优化11月04日(周二)19:30精彩开播|宣讲信息报告题目赛宣讲:从Verilog到网表:电路
    的头像 发表于 11-04 08:08 397次阅读
    【精选直播】openDACS 2025 开源EDA与芯片大赛 赛<b class='flag-5'>题</b>六 赛<b class='flag-5'>题</b>三 直播宣讲会

    SM4算法实现分享(一)算法原理

    SM4分组加密算法采用的是非线性迭代结构,以字为单位进行加密、解密运算,每次迭代称为一轮变换,每轮变换包括S盒变换、非线性变换、线性变换、合成变换。加解密算法与密钥扩展都是采用32轮非线性迭代结构
    发表于 10-30 08:10

    【精选直播】openDACS 2025 开源EDA与芯片大赛 赛二 赛四 直播宣讲会

    openDACS2025开源EDA与芯片大赛线上宣讲赛二:TestBench生成与验证10月31日(周五)19:30精彩开播|宣讲信息报告题目赛宣讲:TestBench生成与验证宣讲嘉宾叶靖
    的头像 发表于 10-28 10:08 644次阅读
    【精选直播】openDACS 2025 开源EDA与芯片大赛 赛<b class='flag-5'>题</b>二 赛<b class='flag-5'>题</b>四 直播宣讲会

    国密系列算法简介及SM4算法原理介绍

    一、 国密系列算法简介 国家商用密码算法(简称国密/商密算法),是由我国国家密码管理局制定并公布的密码算法标准。其分类1所示: 图1 国家商用密码
    发表于 10-24 08:25

    【赛补充说明】2025全国大学生FPGA创新设计竞赛紫光同创杯赛

    【赛发布】2025年全国大学生FPGA创新设计竞赛紫光同创杯赛邀您鸿图展翼共赴芯程!【赛知多少】紫光同创赛答疑专场|2025年全国大学生嵌入式芯片与系统设计竞赛FPGA赛道【板卡借用申请开放
    的头像 发表于 09-12 16:03 1664次阅读
    【赛<b class='flag-5'>题</b>补充说明】2025全国大学生FPGA创新设计竞赛紫光同创杯赛

    【赛教程】基于RK3568+PG2L50H实现八路视频输入参考方案

    【赛发布】2025年全国大学生FPGA创新设计竞赛紫光同创杯赛邀您鸿图展翼共赴芯程!重磅!全国FPGA大赛紫光同创杯提交作品即送FPGA开发板!【赛知多少】紫光同创赛答疑专场|2025年全国
    的头像 发表于 09-12 16:03 1092次阅读
    【赛<b class='flag-5'>题</b>教程】基于RK3568+PG2L50H实现八路视频输入参考方案

    PPEC电源DIY套件:图形化算法编程,解锁电力电子底层算法实践

    电源。这种方式不仅降低了开发门槛,还保留了对底层算法的控制能力,具有很强的实践性和教育意义。 升级版开关电源DIY 套件核心组件含: PPEC 最小系统板(PPEC32F334RBT7 芯片
    发表于 08-14 11:30

    【赛知多少】 紫光同创赛答疑专场|2025年全国大学生嵌入式芯片与系统设计竞赛FPGA赛道

    紫光同创赛道答疑专场来啦!2025年全国大学生嵌入式芯片与系统设计竞赛报名已拉开帷幕,FPGA赛道的挑战与创新并存。近期,我们收到许多关于赛的咨询,小眼睛科技团队第一时间整理了大家的疑问,并带来
    的头像 发表于 08-06 11:02 3239次阅读
    【赛<b class='flag-5'>题</b>知多少】 紫光同创赛<b class='flag-5'>题</b>答疑专场|2025年全国大学生嵌入式芯片与系统设计竞赛FPGA赛道

    从细微处把关!小灯泡气密性检测仪对照明行业的重要性

    在照明行业,小灯泡结构虽简,但生产工艺细节关乎性能与寿命。气密性检测是关键工序,影响灯泡稳定性、安全性及寿命。本文将从技术原理、行业意义、实际应用三方面,下述是探讨小灯泡气密性检测仪对行业的重要性
    的头像 发表于 06-20 14:03 343次阅读
    从细微处把关!小<b class='flag-5'>灯泡</b>气密性检测仪对照明行业的重要性

    SVPWM的原理及法则推导和控制算法详解

    SVPWM 是近年发展的一种比较新颖的控制方法,是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使输出电流波形尽 可能接近于理想的正弦波形。空间电压矢量 PWM 与传统
    发表于 03-14 14:51

    开关电源的基础知识题目及答案

    本帖最后由 嗳唱歌de图图 于 2025-3-5 15:11 编辑 第1:省电模式具有以下哪些性能特征?A高的轻负载效率B固定的开关频率C可能存在 EMI 问题D在轻负载时具有较高的纹波电压
    发表于 03-05 15:02

    应用MSP430G2553与ADS1120检测K型热电偶温度,输入为正,怎么读数为负?

    应用MSP430G2553与ADS1120检测K型热电偶温度,连接如图示 设定方式:AINp=AIN0,AINn=AIN1,连续模式,PGA=64,内部参考电压, 现象:不加热热电偶第一次读数0x8050,第二次以后0xC050 加热热电偶,读数从0xC0XX开始增加
    发表于 01-07 06:13

    基站开关电源的管理及维护

    基站开关电源的管理及维护 导读 本文重点介绍了开关电源的“类型及使用场景、配置原则及算法、日常管理及维护”三部分内容。 第一部分  类型及使用场景 1.组合式开关电源 2.嵌入式
    的头像 发表于 12-16 16:28 3237次阅读
    基站<b class='flag-5'>开关</b>电源的管理及维护