V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericgui
V2EX  ›  LeetCode

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

  •  1
     
  •   ericgui · 2018-05-28 01:48:37 +08:00 · 24899 次点击
    这是一个创建于 2407 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不讨论对进入大公司是否有帮助,这是另一个话题。

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

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

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

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

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

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

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

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

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

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

    刷题对这种“关系”的把握帮助不大
    muziki
        10
    muziki  
       2018-05-28 07:01:24 +08:00 via iPhone
    想要提高水平,多去参与优秀的开源项目提 PR,体会一下那些项目的精美之处,一味地刷题,跟小朋友在老师教完 10 内加减法之后不停地练习 1+1=? etc 没多大区别,因为就算以纯算法练习来说那些东西知识范围也有限
    pkookp8
        11
    pkookp8  
       2018-05-28 07:29:41 +08:00 via Android
    用肯定有用,至于效果
    一个人写项目用了个快排
    另一个人先用冒泡实现,后来优化的时候学了下排序,换成了快排
    另一个人用冒泡实现,后来就没有优化了
    可能就是这种差别吧
    simpleman
        12
    simpleman  
       2018-05-28 08:18:48 +08:00 via Android
    目前刷了有 100 来道了,感觉自己 stl 用的熟练了😀
    nl101531
        13
    nl101531  
       2018-05-28 08:38:45 +08:00 via Android
    个人认为: 日常业务开发更注重设计模式,算法提升确实不大。不过常刷题能保持思维活跃,没事还是要刷的。。。
    vansl
        14
    vansl  
       2018-05-28 08:41:27 +08:00 via iPhone
    @simpleman 对于 Javaer&pythoner 熟悉 STL 有什么好处吗?
    yxcoder
        15
    yxcoder  
       2018-05-28 09:19:59 +08:00
    感觉应该还是有的,在 OJ 上面做过一段时间的题,感觉对于各种边界判断和代码优化方面帮助还是比较大的,做这些题不是说在工作中非要把代码优化到什么程度,而是培养从不同角度考虑问题的思维
    ghostgril
        16
    ghostgril  
       2018-05-28 09:20:09 +08:00
    对面试具有很好的帮助
    mseasons
        17
    mseasons  
       2018-05-28 09:21:35 +08:00
    @cs923 一百道 easy 级别的几天就刷完了
    3dwelcome
        18
    3dwelcome  
       2018-05-28 09:52:29 +08:00
    刷难题,对能力提升肯定会有一点帮助的,但效果没那么显著,因为你刷着刷着,就会为了解题而去思考。而不是为了提升能力,这就是应试教育和素质教育的区别。
    个人感受而言,有时间多钻研 github 上自己感兴趣的优秀开源项目,提升效果最好。其次是小型代码竞赛,最后才是刷题。
    qdzzyb
        19
    qdzzyb  
       2018-05-28 09:53:48 +08:00
    先把边界条件想明白再实现
    karllynn
        20
    karllynn  
       2018-05-28 10:11:25 +08:00
    基本没有。。。不过有些业务还是可以用到复杂算法的
    fcoolish
        21
    fcoolish  
       2018-05-28 10:15:57 +08:00
    有用啊
    youxiachai
        22
    youxiachai  
       2018-05-28 10:24:02 +08:00
    如果,,你没有被的什么事情的话..
    刷题.可以保持你的编程感觉...
    重要的是..你除了刷题,还有没有其他事可以做..
    yazoox
        23
    yazoox  
       2018-05-28 10:24:30 +08:00 via Android
    个人意见,最大的用处就是面试了吧。因为这个比较客观,好评价,好衡量。
    但我工作这么多年 10+,真正需要用到那些算法的情况,屈指可数。当然,我本来也就不在算法组工作。
    depress
        24
    depress  
       2018-05-28 10:38:04 +08:00
    帮助是肯定有帮助,但是有帮助和用得上没法划等号。这个帮助可能是隐性的,你没发现,但实际上已经有提高,也可能好几年才能碰上一回。注不注重这个东西,还是要看四象限法则,如果目前工作不需要,那还是要把精力放在别处,如果有额外精力和时间,搞一搞算法没坏处。
    cs923
        25
    cs923  
       2018-05-28 10:38:37 +08:00 via Android
    @mseasons 我是挨着挨着刷的 而且刷题时间很少
    kera0a
        26
    kera0a  
       2018-05-28 10:42:13 +08:00
    有用的,开拓眼界
    算法其实是解决现实中的问题的。
    碰到了某些问题可能会想到用某些算法类似的思路去解决,学肯定不吃亏啊
    刷题就是强化你这种能力
    codeyung
        27
    codeyung  
       2018-05-28 10:54:06 +08:00
    说实话 就是补补你之前上学没学好的 练练逻辑
    其次 主要的还是面试用的 ... 没别的了
    easy 都刷了 剩下的看看 一般就 ... 不说了
    dychenyi
        28
    dychenyi  
       2018-05-28 11:47:16 +08:00
    工作十多年的了,用到排序基本是写自己的比较函数给 std::sort 而已。
    想要快速查找用 hash,map,不够用再嵌套,一般存储用 list,vector 够用。工作还是比较低级。
    哎。
    htfy96
        29
    htfy96  
       2018-05-28 11:48:25 +08:00   ❤️ 1
    边际效应递减
    lzhCoooder
        30
    lzhCoooder  
       2018-05-28 13:18:43 +08:00
    有用的,题刷多了心里更容易把握好空间复杂度和时间复杂度这两把尺子
    kx5d62Jn1J9MjoXP
        31
    kx5d62Jn1J9MjoXP  
       2018-05-28 13:19:09 +08:00
    没有
    soulmine
        32
    soulmine  
       2018-05-28 13:50:36 +08:00
    对你写业务代码没有 你写的代码是用的不是来炫技的 举个例子 你去 python 里面写个 lamba 试试
    但长期来说 是有的
    dong3580
        33
    dong3580  
       2018-05-28 14:00:55 +08:00
    对写代码基本没用,算法都是成熟固定的那几个,没什么好改的,除非你能证明你的方式更高效,然而没人轻易采纳你的。只对面试造火箭有用,
    hotdogwc
        34
    hotdogwc  
       2018-05-28 14:11:01 +08:00
    @muziki 比如哪些项目呢?大到什么程度的,现在我都参与一些似乎没那么大的...
    shiguiyou
        35
    shiguiyou  
       2018-05-28 14:19:22 +08:00
    有区别的,以前我只知道个 ArrayList,学习了数据结构和算法才发现很多东西可以用堆栈,链表等数据结构来解决的,还有平时肯定会遇到一些小型的计算等,可以用算法完美实现的,能力上别人一看就不是一个层次的。
    wellsc
        36
    wellsc  
       2018-05-28 14:29:23 +08:00 via iPhone
    对提高编码肌肉记忆有帮助,对面试也有帮助,对提升 cs 知识水平帮助不大。
    yhvictor
        37
    yhvictor  
       2018-05-28 14:37:14 +08:00
    刷题不清楚,不过搞 ACM 对于代码调试帮助还蛮大的。现在组里现在碰到不好解决的 bug 都丢给我,捂脸。
    orangeade
        38
    orangeade  
       2018-05-28 14:58:43 +08:00
    刷题可以熟悉新语言
    RedStrings
        39
    RedStrings  
       2018-05-30 10:13:41 +08:00 via Android
    @muziki 但是他的代码也比大多数人强啊。
    Acceml
        40
    Acceml  
       2018-08-27 15:27:19 +08:00
    我觉得对工程能力是没帮助的,这是两个不同的领域。但是对于应届生扎实编程基础,锻炼编程思维,我觉得没有比这种方式更好的了。
    ——————————————————
    有兴趣的老铁可以关注我的公众号:Leetcode 名企之路,每天更新一道 Leetcode 题解,一起进步。
    ailionx
        41
    ailionx  
       2018-09-18 05:04:29 +08:00
    我觉得非常有帮助。刷了一些同事配合上温习数据结构和算法,就感觉编程能力有很大的进步。
    swordspoet
        42
    swordspoet  
       2018-10-10 19:04:22 +08:00
    @qdzzyb 对,边界就 key。
    jkhere
        43
    jkhere  
       2019-02-11 12:41:56 +08:00
    肯定很有用,但是需要你坚持下来
    785999159
        44
    785999159  
       2019-02-24 06:45:38 +08:00   ❤️ 3
    那你说高考成绩和写代码的能力成不成正比呢?
    我觉得公司要求刷题,归根结底都是一种智利筛选手段。
    技术什么的都可以学,尤其是 it 中技术更迭的太快,相比熟练掌握某项工具的人,公司应该更想要能够快速掌握某项工具的人。 所以美国的大公司爱考算法题,因为能答出来的只有两种人,一个是聪明人,还有一个是愿意为了学习一样东西刻苦的人。这两者都完美符合了公司的期望 -- 快速学习的能力
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2671 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:47 · PVG 15:47 · LAX 23:47 · JFK 02:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.