`
microcoder
  • 浏览: 2735 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一道淘汰85%面试者的百度开发者面试题

 
阅读更多

首先对于标题我是根据题目原出处http://student.csdn.net/mcd/topic/235300/753730写的,所以如果大家觉得逼格有点高的话,请无视标题。

下面上题目:

大河轻松度,阴沟易翻船。无风无浪的地方,按理说是绝对不该翻船的。可是,就是在大家看似无比简单的问题上,栽倒无数人。


题目描述:

依序遍历0到100闭区间内所有的正整数,如果该数字能被3整除,则输出该数字及‘*’标记;如果该数字能被5整除,则输出该数字及‘#’标记;如果该数字既能被3整除又能被5整除,则输出该数字及‘*#’标记。


提示:

这道看似非常简单的题目,却潜藏着几个玄机。面试官通过这道题,考察学生在语法、语义、语用以及算法优化方面的能力。现实告诉我们,通过这一道题目,就可以淘汰85%的面试者。看似残酷的考察方式,却也体现出学生在基础知识、动手能力到思维能力上的差距。

需要注意的考察点:

- 语法:语法的正确书写,包括格式
- 语义:对循环、分支等语义的理解与掌握
- 语用:对变量命名、表达式及语句的组合使用
- 算法优化:如果要提高运行效率,可以在算法上寻找突破口,也可以采用空间换时间的通用原则。

对于这种问题,如果不是面试题的话,我想大家一般不会多想,大部分的思路就是一个循环加三个判断,打完收工。其实如果是0—100的话,确实也不需要过多考虑性能优化问题,因为对于今天的硬件来说这都不是事啊,下面上一般的常规写法:

for(int i=1;i<=100;i++){
			if(i%15 == 0){
				System.out.println(i+"*");
				System.out.println(i+"#");
				System.out.println(i+"*#");
			}else{
				if(i%3 == 0)
					System.out.println(i+"*");
				if(i%5 == 0)
					System.out.println(i+"#");
			}
		}
这种常规的写法,时间复杂度O(n)并没有得到优化,可以感觉到是一种不好的算法,通过分析可以看出,它的循环次数较多,因此可以通过减少循环次数来获得优化,下面就是我优化过的算法。

因为先前没注意看清题目输出要求,因此做了些小修改,多谢MarkSaas的提醒。

上代码:

		//商向下取整
		int threeIndex = (int) Math.floor(100/3);	
		int fiveIndex = (int) Math.floor(100/5);
		int bothIndex = (int) Math.floor(100/15);
		for(int i=1;i<=threeIndex;i++){
			if(i%5 != 0)
				System.out.println(3*i+"*");
			if(i<=fiveIndex && i%3 != 0)
				System.out.println(5*i+"#");
			if(i<=bothIndex)
				System.out.println(15*i+"*#");
		}


可以看出优化过的算法的时间复杂度为O(n/3),通过计算它们的耗时,我用5000做了测试,发现后者优化过的算法耗时可以减少50%(此结果是我的计算机运行的结果,不同的计算机会有些许差异。)。我把这个结果已经回复到那个帖子里面去了,如果大家还有什么好的优化方案,可以留言交流讨论。
-----------转载请注明出处:http://blog.csdn.net/justmeing/article/details/24386071-------------

分享到:
评论

相关推荐

    百度开发者大会成都站演讲PPT全集.rar

    百度开发者大会成都站演讲PPT全集

    2018最新iOS面试题全集

    2018最新iOS面试题全集, 值得每个ios开发者查阅,分享出来让大家共同进步学习.

    java面试手册,java开发者必备

    java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java面试手册,java开发者必备java...

    2012 百度开发者大会现场精彩资源集锦,免费下载!

    2012年3月23日召开百度开发者大会,一同探讨“应用为王”的中国互联网趋势和开发者在开放格局下的新机遇;深度交流搜索引擎、云计算、移动互联网、Web Apps等方向的技术创新。

    welink开发者--题库.pdf

    华为 welink开发者--题库.pdf 考试题 和 答案 保障质量

    百度开发者别册

    百度开发者别册

    开发者C语言(习题).rar

    开发者星球C语言习题,包括选择题100题、程序填空题40题、程序阅读题100题、编程题100题、判断题170、填空题140等。

    Python开发者110道笔试面试题

    这是给Python开发者准备的110道笔试面试题,我只把问题列出来了,答案见文末,建议每道题都要认真刷一遍,有些题可以尝试用多种方式来解答,甚至做延伸学习,说真的,很多题都可以单独拎出来写一篇文章,

    史上最全的大数据面试题-大数据开发者必看.docx

    史上最全的大数据面试题-大数据开发者必看 史上最全的大数据面试题-大数据开发者必看全文共9页,当前为第1页。史上最全的大数据面试题-大数据开发者必看全文共9页,当前为第1页。【某公司笔试面试题】 1\使用mr,...

    软件开发者面试百问

    软件开发者面试百问,我觉得还是很不错的,不是所有问题都会答

    个人整理的J2EE开发面试题(很全面的)

    用心整理的J2EE开发的面试题,希望可以给大家带来帮助...

    Java面试题大全(整理版)1000+面试题 (面试准备+Java基础+高级特性+常见问题+答案解析)

    这份资源是一份包含1000+道Java面试题的整理版,旨在帮助广大Java开发者更好地准备面试,提升面试成功率。内容涵盖了Java的基础知识、高级特性、常见问题等多个方面,每个问题都附带了详细的答案解析,有助于读者...

    【2023中高级向】53道vue面试题附答案

    容我多说几句: 不管你是刚入门 Vue 还是有一定经验的前端开发者,这些面试题都能帮助你深入掌握 Vue 框架。掌握这些问题的答案不仅可以在面试中展现自己的技能,还能够提升你的前端开发能力。 推荐格式: 这份资源...

    2024年tensorflow面试题必问.zip

    适用人群:本面试题适用于所有想要参加技术面试的求职者,无论你是刚毕业的大学生还是有一定工作经验的开发者,都可以通过这些面试题来提升自己的面试能力。 使用场景及目标:本面试题可以在求职者准备技术面试的...

    Vue 面试题( 前端开发 + Vue + 面试题 + 准备)

    容我多说几句: 不管你是刚入门 Vue 还是有一定经验的前端开发者,这些面试题都能帮助你深入掌握 Vue 框架。掌握这些问题的答案不仅可以在面试中展现自己的技能,还能够提升你的前端开发能力。 推荐格式: 这份资源...

    软件开发者测试练习题.zip

    针对于慕测的开发者测试比赛的练习题,内部有练习、预选赛、开发者测试省赛、国赛练习题

    互联网公司Java面试题及核心知识点

    内容概要:本书从近一百套最新一线互联网公司面试题中精选而出,涵盖Java架构面试所有技术栈,包 括JVM,Mysql,并发,Spring,Mybatis,Redis,MQ,Zookeeper,Netty, Dubbo,Spring Boot,Spring Cloud,数据结构...

    29个Vue经典面试题(附源码级详解)

    Vue经典面试题资料包括了Vue.js中常见的面试题以及详细的解答,能够帮助开发者深入了解Vue.js框架的应用和原理。 适用人群: Vue经典面试题资料适合有一定前端开发经验,想要深入学习Vue.js框架和准备面试的人群。...

Global site tag (gtag.js) - Google Analytics