漫画:骚操作系列(灯泡开关的经典面试题)
来自:小浩算法
昨天的排版简直逊爆了,让我很不满意!小浩作为一个处女座,追求完美是必须的。所以呢,今天的文章进行了多次的审阅才发出(当然,如果大家还觉得很丑。那我也只能再继续努力。毕竟我不是一个专业的美工。另外,今天的二维码很酷炫有木有?)
今天为大家分享一道关于“电灯泡”的题目。
话不多说,直接看题。
01
第319题:开关灯泡
第319题:初始时有 n 个灯泡关闭。第 1 轮,你打开所有的灯泡。第 2 轮,每两个灯泡关闭一次。第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。对于第 n 轮,你只切换最后一个灯泡的开关。找出 n 轮后有多少个亮着的灯泡。
示例:
输入: 3
输出: 1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].
你应该返回 1,因为只有一个灯泡还亮着。
(只要一瞪,就会了)
02
题目分析
这是一道难度评定为困难的题目。但是,其实这并不是一道算法题,而是一个脑筋急转弯。只要我们模拟一下开关灯泡的过程,大家就会瞬间get,一起来分析一下:
我们模拟一下n从1到12的过程。在第一轮,你打开了12个灯泡:
因为对于大于n的灯泡你是不care的,所以我们用黑框框表示:
然后我们列出n从1-12的过程中所有的灯泡示意图:
可以得到如下表格:
观察一下,这是什么?观察不出来,咱们看看这个:
1//go
2func main() {
3 for n := 1; n <= 12; n++ {
4 fmt.Println("n=", n, "\t灯泡数\t", math.Sqrt(float64(n)))
5 }
6}
//print
n= 1 灯泡数 1
n= 2 灯泡数 1.4142135623730951
n= 3 灯泡数 1.7320508075688772
n= 4 灯泡数 2
n= 5 灯泡数 2.23606797749979
n= 6 灯泡数 2.449489742783178
n= 7 灯泡数 2.6457513110645907
n= 8 灯泡数 2.8284271247461903
n= 9 灯泡数 3
n= 10 灯泡数 3.1622776601683795
n= 11 灯泡数 3.3166247903554
n= 12 灯泡数 3.4641016151377544
没错,只要我们对n进行开方,就可以得到最终的灯泡数。根据分析,得出代码:
//给一个c++版本的
class Solution {
public:int bulbSwitch(int n) {return sqrt(n);}
};
郑重申明(读我的文章必看):
本系列所有教程都不会用到复杂的语言特性,大家不需要担心没有学过相关语法,使用各语言纯属本人爱好,毕竟我是一个博爱的人,需要雨露均沾。
作为学术文章,虽然哥的风格很风趣,但是所有代码均在leetcode上进行过测试运行。严谨,我是认真的。
最后,请记住,算法思想才是最重要的!
03
证明
我不服,没有证明,你说毛线!证明如下:
约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
从我们观察可以发现,如果一个灯泡有奇数个约数,那么最后这个灯泡一定会亮着。
什么,你问我奇数是什么?奇数(odd)指不能被2整除的整数 ,数学表达形式为:2k+1, 奇数可以分为正奇数和负奇数。
所以其实我们是求,从1-n有多少个数的约数有奇数个。而有奇数个约数的数一定是完全平方数。这是因为,对于数n,如果m是它的约数,则n/m也是它的约数,若m≠n/m,则它的约数是以m、n/m的形式成对出现的。而m=n/m成立且n/m是正整数时,n是完全平方数,而它有奇数个约数。
我们再次转化问题,求1-n有多少个数是完全平方数。
什么,你又不知道什么是完全平方数了?完全平方指用一个整数乘以自己例如1*1,2*2,3*3等,依此类推。若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。
到这里,基本就很明朗了。剩下的,我想不需要再说了吧!
所以,今天的问题你听明白了吗?评论区留下你的想法吧!
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:
长按订阅更多精彩▼如有收获,点个在看,诚挚感谢
漫画:骚操作系列(灯泡开关的经典面试题)相关推荐
- axure原型怎么让文字自动换行_Axure骚操作系列:“生成”手机APP
很多产品朋友想在手机上预览自己的原型,这样给到甲方和程序时能更直观的展现产品全貌,大幅度降低沟通成本,笔者尝试了以下方法(老司机可以直接看方法三). 一.使用官方Axure Share 优点:简单部署 ...
- 左神讲算法——异或的高级操作(两数交换+经典面试题)
目录 1. 异或的性质 2. 两数交换 3. 经典面试例题 参考链接:2021最新左神数据结构算法全家桶 1. 异或的性质 异或可以看成相同为1,不同为0:也可以看作无进位相加,有奇数个1则结果为1, ...
- 【Python基础】pandas的骚操作:一行 pandas 代码搞定 Excel “条件格式”!
来源:Python数据科学 作者:东哥起飞 本篇是pandas100个骚操作系列的第 7 篇:一行 pandas 代码搞定 Excel "条件格式"! 系列内容,请看????「pa ...
- 【GCC编译优化系列】宏定义名称与函数同名是一种什么骚操作?
作者简介 *架构师李肯(全网同名)**,一个专注于嵌入式IoT领域的架构师.有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于 ...
- 漫画:假装内卷,才是互联网人的骚操作
互联网公司内卷加班成性其实比内卷更内卷的是互联网人开始苦练假装内卷当你觉得他们都在内卷而不敢下班的时候他们已经偷偷下班回家却还可以在办公室里留下了内卷的气氛营造他们随时回来的假象,制造完美在场证据一入 ...
- 一文看懂推荐系统:排序16:Dual Augmented Two-tower Model和张俊林的SENet,都是为了加入特征交叉想,增强重要特征,去掉噪声,类似于attention的骚操作
一文看懂推荐系统:排序16:Dual Augmented Two-tower Model和张俊林的SENet,都是为了加入特征交叉想,增强重要特征,去掉噪声,类似于attention的骚操作 提示:最 ...
- Python 骚操作,微信远程控制电脑
**今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚至你可以发送命令来远程关闭电 ...
- Python 中让你相见恨晚的 20 个骚操作
今天和大家分享 20 个 Python 编程中新手必会的"骚操作",使用的频率超高!记得点赞,收藏哦!话不多说,进入正题! 1.列表推导式 使用列表推导式创建一个列表. >& ...
- 【Python】这些Python骚操作,你值得拥有
Python 我用的比较多一点,对一些小玩意有些许了解.我不大清楚骚操作怎么定义,只好说说我觉得 Python 和其它语言(比如 C 和 JAVA 等)设定比较奇特的地方. 看了后,说不定你马上就有玩 ...
最新文章
- 聊聊用户裂变的那些事
- CTFshow 文件上传 web153
- Android 监听APP进入前台、后台
- Union-SQL Server学习笔记
- 设计模式----原型模式(C++实现)
- jasypt加密_【Jasypt】给你的配置加把锁
- 使用Gogs搭建Git服务器
- springboot 建readme_README
- 浅谈数据迁移测试(转载)
- Linux下的IO监控与分析
- 2020switch电信最快的dns_求教电信宽带switch用哪个dns快
- linux查cer证书信息,openssl 查看证书
- laravel实现打包多个文件,并下载
- matlab三相短路电流计算程序_三相短路电流计算
- 打印机无法连接0x000000709
- 至简播放器ffplay工作原理
- 随便小计:MRP元素参与计算标准配置
- linux udev 激活usb网卡,linux – 用于USB设备的udev规则并忽略其他设备
- [系统安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及蠕虫解析
- 使用神经网络完成新闻分类
热门文章
- jpa删除数据后数据库无修改_java – JPA不删除数据库行
- 【操作系统】进程 与 线程 详解(以及二者的比较)
- flask-WTF和sqlalchemy结合使用并实现前端页面登录(综合使用)
- PTA数据结构与算法题目集6-4 6-3 6-8
- [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询
- 图论-无向图的连通性(POJ1144)(POJ3352)
- aka名字_她叫李清照,没有AKA,这是她的专访//关于“天赋”二字,她说……
- mysql另外加外键约束怎么写_mysql外键约束怎么写
- 解决 “message“:“An invalid response was received from the upstream server“
- MySQL数据模型图导出ddl脚本_DB2中导出数据库的所有DDL脚本.