刷题(leetcode 等)对提高编程水平有帮助吗?

2018-05-28 01:48:37 +08:00
 ericgui
不讨论对进入大公司是否有帮助,这是另一个话题。

就讨论是否对自己写代码有帮助

有人愿意分享一下吗?谢谢
24820 次点击
所在节点    LeetCode
44 条回复
cs923
2018-05-28 02:08:47 +08:00
算法渣,也是最近才开始准备刷 leetcode,目标是今年刷满 100 道。
帮助我觉得肯定是有的:
1.可以让自己思维保持活跃
2.强化了自己对基本数据结构练习和理解
3.一般会考虑多种可能的情况,让思维更加缜密
lsmgeb89
2018-05-28 02:12:54 +08:00
有啊,北美这边算法题是重要的面试部分,senior 跳槽也要过这关,国内现在也开始流行这个了。
ericgui
2018-05-28 02:29:15 +08:00
@lsmgeb89 你看你看,跑题了吧兄弟,我说的是对实际写代码是否有帮助。这真是另一个话题,而且会引战。
agagega
2018-05-28 02:45:27 +08:00
或多或少有一点吧,逼着自己考虑 corner case 然后先实现
Hsinyao
2018-05-28 02:46:55 +08:00
我个人感觉对工程能力提升有限,但是多了解这些东西能拓宽写代码时的思路,对个人思维广度深度也有训练提升作用
lsmgeb89
2018-05-28 03:23:53 +08:00
@ericgui 还是有帮助的,从两方面来谈:

1. 工作确实需要
如果你做的不是 call call API,写几个 for while 的活的话。

例如在大厂的核心组,算法还是天天用的。

主要看你的能力和视野了,如果你能走的越高,越远,算法就越有用。

2. 就算法训练本身来说
其实算法主要是训练你的逻辑,分析问题的能力,而且复杂度分析什么的,对你写代码,优化代码的性能还是很有帮助的。

其实编程除了业务逻辑外,就是算法了,可以说是寸步不离。
msg7086
2018-05-28 04:10:07 +08:00
比如你日常开发写出来的代码是 O(nlogn) 还是 O(n^3)?
比如你要做数据转换处理的时候是开个数组狂撸还是聪明地去使用树 / 堆 / Map 等结构?
比如你要做大量数据计算的时候是开个循环跑还是分治一下多线程 MapReduce ?

这些看似无所谓的细节,可以让两个人的代码质量差距变得非常大。
vegito2002
2018-05-28 06:13:05 +08:00
取决于个人水平。打一次 contest。如果能打进前 200,刷太多对你提升就不大了
muziki
2018-05-28 06:55:35 +08:00
以我这两年给大型 oss 混 pr 的经历而言,我觉得没有,那东西纯粹就是为面试突击准备的

再实际编程中那点刷题经验不值一提,作为从业人员,大多数人都有资料备齐的情况下实现算法原型的能力,但离系统可用性差太远,这不是刷题能解决的

貌似 Linus 说过烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系

刷题对这种“关系”的把握帮助不大
muziki
2018-05-28 07:01:24 +08:00
想要提高水平,多去参与优秀的开源项目提 PR,体会一下那些项目的精美之处,一味地刷题,跟小朋友在老师教完 10 内加减法之后不停地练习 1+1=? etc 没多大区别,因为就算以纯算法练习来说那些东西知识范围也有限
pkookp8
2018-05-28 07:29:41 +08:00
用肯定有用,至于效果
一个人写项目用了个快排
另一个人先用冒泡实现,后来优化的时候学了下排序,换成了快排
另一个人用冒泡实现,后来就没有优化了
可能就是这种差别吧
simpleman
2018-05-28 08:18:48 +08:00
目前刷了有 100 来道了,感觉自己 stl 用的熟练了😀
nl101531
2018-05-28 08:38:45 +08:00
个人认为: 日常业务开发更注重设计模式,算法提升确实不大。不过常刷题能保持思维活跃,没事还是要刷的。。。
vansl
2018-05-28 08:41:27 +08:00
@simpleman 对于 Javaer&pythoner 熟悉 STL 有什么好处吗?
yxcoder
2018-05-28 09:19:59 +08:00
感觉应该还是有的,在 OJ 上面做过一段时间的题,感觉对于各种边界判断和代码优化方面帮助还是比较大的,做这些题不是说在工作中非要把代码优化到什么程度,而是培养从不同角度考虑问题的思维
ghostgril
2018-05-28 09:20:09 +08:00
对面试具有很好的帮助
mseasons
2018-05-28 09:21:35 +08:00
@cs923 一百道 easy 级别的几天就刷完了
3dwelcome
2018-05-28 09:52:29 +08:00
刷难题,对能力提升肯定会有一点帮助的,但效果没那么显著,因为你刷着刷着,就会为了解题而去思考。而不是为了提升能力,这就是应试教育和素质教育的区别。
个人感受而言,有时间多钻研 github 上自己感兴趣的优秀开源项目,提升效果最好。其次是小型代码竞赛,最后才是刷题。
qdzzyb
2018-05-28 09:53:48 +08:00
先把边界条件想明白再实现
karllynn
2018-05-28 10:11:25 +08:00
基本没有。。。不过有些业务还是可以用到复杂算法的

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

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

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

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

© 2021 V2EX