挖个坑,作为 python 程序员,面试时要求手写二分查找,可以说不么

2014-10-29 14:20:19 +08:00
 JoeShu
不会写,正常么?
18825 次点击
所在节点    Python
129 条回复
zmj1316
2014-10-29 15:58:53 +08:00
写个一般的不是随手的么,当然要没有bug可能要多想想啊
lyragosa
2014-10-29 16:01:22 +08:00
作为一个编程爱好者,百度了一下,终于知道了“什么是二分查找”……

其实我觉得我们这种非科班程序员……好吧,非科班编程爱好者来说,Glossary的确是个难点。

好多看起来高大上的名词一查百科就:“靠,原来不就是这个么。”
jacob
2014-10-29 16:02:39 +08:00
@binux 我觉得lz的开发可能不涉及到大量算法的东西,时间长了lz关注点就变了。
RobberPhex
2014-10-29 16:04:58 +08:00
@lyragosa 难道非科班程序员就不用读书了么?
krafttuc
2014-10-29 16:10:42 +08:00
这应该算是基础了吧
hahastudio
2014-10-29 16:13:14 +08:00
太可怕了,现在这么水就敢去面试了么= =
mhycy
2014-10-29 16:17:09 +08:00
@hahastudio 写得出来也不敢去面试 T,T

话说,如何提高自己信心?
skybr
2014-10-29 16:18:22 +08:00
就算不会写也该知道import bisect啊.
treo
2014-10-29 16:24:16 +08:00
楼主是来反串黑python的吧..
cloudzhou
2014-10-29 16:29:55 +08:00
这是最基本的算法,最近刚好在给人面试,自己想出来的一些题目,供大家参考:

1 走台阶问题:
很长的台阶,共有 X 级,一个大人每次可以走 m级 或者 n级,如果最后剩下不足 m级 或者 n级,那就算一步走完,问有几种不同的走法。
比如 7 级的台阶,每次可以走 2级 和 3级,有 5 种走法:
2->2->2->1
3->2->2
2->3->2
2->2->3
3->3->1

有两种解法: 1 动态规划 2 排列组合

2 能否求零问题:
给出一组正数,随意排列组合,每个正数使用且只使用一次,使用 +, - ,判断能否得到 0。
比如 {1,3,7,8,11} 那么 11 - 8 - 7 + 3 + 1 = 0。
而 {1,3,7} 那么无论怎么排列和+-都没办法得到 0。

解法:贪心求最优解

3 给出一组正数和目标值,判断能否在这组正数里每个数乘以一个非负数求和得到目标值。
比如 {3, 4} 目标值是 17,那么可以通过 3*3 + 2*4 = 17。
{3, 4} 目标值是 18,那么可以通过 6*3 + 0*4 = 18、 2*3 + 3*4 = 18 等等。
而如果 {9, 7} 目标值是 19,没办法找到合适的 非负数相乘求和 得到 19。

解法:这是一个 DFS 遍历的问题。

4 另外就是一些现实的问题,比如怎么简单实现一个 LRU cache。
解法:hash + 双向链表,能考一些编码细节。


这些题目虽然有些理论化,但是还是能看出编码能力的。
zts1993
2014-10-29 16:30:21 +08:00
二分都写出来还好意思。。。。。都没问题快排,这都不肯写,给人的影响就是态度不好。。。
bolasblack
2014-10-29 16:32:18 +08:00
虽然我觉得楼主的“作为一个 Python 程序员”这个前提很奇怪,不过我疑惑的是,在很多地方类似这种“二分查找”或者“快速排序”之类的算法,真的有那么重要吗?实话说我没有遇到过需要自己写这种算法的场景啊,感觉真正用到这种算法的时候也有库可以解决问题啊,真的需要自己写的时候,找个库的代码来读,然后找些解释算法的逻辑的资料来读不就好了吗?
caixiexin
2014-10-29 16:35:22 +08:00
对于我们这种经常做业务软件开发的码农来说,算法确实已经是好遥远的事了= =
二分查找我还记得思路,写代码就不行了= =
F281M6Dh8DXpD1g2
2014-10-29 16:36:45 +08:00
楼上说简单的,自己先手写一遍试试呗~
chuan
2014-10-29 16:39:27 +08:00
某大牛说过“迭代者为人,递归者为神”
mahone3297
2014-10-29 16:41:04 +08:00
还是好好写吧。。。
bcxx
2014-10-29 16:42:22 +08:00
@chuan 化递归为迭代的是什么 XD
c742435
2014-10-29 16:44:57 +08:00
@lyragosa 其实设计模式也是一样,随便看了几种原来都是早就在用的方法

我感觉快速排序堆排序等高级算法手写比较麻烦,二分啊冒泡啊这种肯定应该能手写出来的呀。
geew
2014-10-29 16:45:19 +08:00
mhycy
2014-10-29 16:45:47 +08:00
@cloudzhou 第三题没说是否允许小数.....
因没给出限定条件,假定为可以.

最终答案就是: 因为任何数字都能满足要求,所以没有答案

另外,0不算是正数或者负数.....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/142371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX