V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ericgui
V2EX  ›  程序员

关于练习 leetcode 和算法是否对日常工作有用的问题(续)

  •  
  •   ericgui · 2020-06-09 08:54:36 +08:00 · 5405 次点击
    这是一个创建于 1663 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上一次,很久以前,我当时还是非常非常抵触算法的,和微博上有个图的思路类似,觉得用不同的排序算法来排序 array 是类似知道茴字有几种写法。

    然后迫于找工作,开始大量练习 leetcode,于是发现算法其实对于你熟悉 API 还是非常有用的。仅仅做了几个 easy 题,就让我写代码的时候熟练度大大提高了。

    再然后,进一步熟悉算法,开始做 medium 和 hard 题,然后对算法有了进一步深入了解,才发现算法真的是夯实基础,锻炼基本功。

    确实,平时都是写业务,基本用不到算法,但是有了算法作为你的备选答案,你的视野、思考问题的角度,以及代码质量,都能够有不小的改善。

    我最近有三次用到算法的经历。

    1. 我在重构一个项目,本来需要写 2 个函数,分别接收一个对象,或者一组对象,当然你可以用遍历,但我后来用递归来处理数组的情。当然,数组不大,所以性能影响可以忽略,但代码看着精炼多了。

    2. 我需要对一组日期和对应的值进行处理,这些值之间有某种关联,如果有连续的日期出现这个值,你还要通过这个连续的值生成一个新值。我第一反应,这不是动态规划么,然后就试了一下,诶,动态规划确实好使!要放在以前,我估计完全不知道从何下手。你可能会问为何要在前端做大量运算?那显然我们后端提供的数据有问题么。他们正在改。

    3. 我们要排序一个超大数组,60K 多个对象,希望能够 in-place,这样就不会额外创建新的内存空间, 减少内存消耗。我同事手写了一个 quick sort,虽然没写错,但这不搞笑呢么,为什么要手写,而且手写了好几十行,然后我找到一个标准库 api,告诉他,这是 in-place,并且排序算法又不是互斥的,标准库 api 里肯定混合用了很多种算法,根据数据集来做不同的切换,后来做了 jsbench 对比性能,当然标准库 api 完胜。如果不懂算法,你吵架都不知道从何下嘴。

    总之呢,想要成为一个更好的程序员,还是要去熟练掌握各种算法的,越多越好。

    33 条回复    2020-06-12 13:07:46 +08:00
    rodjerL
        1
    rodjerL  
       2020-06-09 08:57:23 +08:00 via iPhone
    是的,而且时候看框架的源码也会用到某些数据结构和算法,如果不了解回比较吃力
    senup
        2
    senup  
       2020-06-09 09:14:38 +08:00
    干这行崇尚的理念不就是技术至上,所以说,多学点总是好的
    zppass
        3
    zppass  
       2020-06-09 10:08:06 +08:00
    最起码会点算法,数据结构理解好一点找工作真的有帮助。
    Torpedo
        4
    Torpedo  
       2020-06-09 10:23:32 +08:00
    我觉得吧,遇到一个算法问题,你要能知道用哪个算法解最好。
    至于这个算法的实现,无论怎么做,保证正确即可。
    相比这个,更重要的还是代码架构、设计这方面
    pandachow
        5
    pandachow  
       2020-06-09 10:30:12 +08:00
    事实上很多 LeetCode 题就是工作中场景的抽象还原。
    Jooooooooo
        6
    Jooooooooo  
       2020-06-09 10:47:27 +08:00
    肯定比刷抖音强

    你再想想
    NCZkevin
        7
    NCZkevin  
       2020-06-09 11:00:11 +08:00
    编辑距离,kmp,排序在实际开发中用过好几次,多刷点算法绝对是有帮助的
    Ariver
        8
    Ariver  
       2020-06-09 11:00:47 +08:00
    +1
    Perry
        9
    Perry  
       2020-06-09 11:01:30 +08:00
    确实是这样的
    dswyzx
        10
    dswyzx  
       2020-06-09 11:22:35 +08:00
    @Jooooooooo 没刷过抖音
    但刷抖音会让你几个小时没有头绪怀疑人生怀疑智商吗
    Donne
        11
    Donne  
       2020-06-09 11:34:01 +08:00
    学习算法之后,写代码不自觉地就会考虑到性能的问题,这是之前考虑不到的地方。
    Mark24
        12
    Mark24  
       2020-06-09 11:47:02 +08:00
    确实是这样
    maplelin
        13
    maplelin  
       2020-06-09 11:52:16 +08:00   ❤️ 3
    刷 leetcode 确实对于判断边界条件,提高代码质量很有帮助,写的 bug 都比之前少了不少
    skys215
        14
    skys215  
       2020-06-09 12:13:37 +08:00
    第一篇的链接有吗
    ruyu
        15
    ruyu  
       2020-06-09 12:31:27 +08:00
    脑子太久不用就会生锈
    Jooooooooo
        16
    Jooooooooo  
       2020-06-09 12:38:52 +08:00
    @dswyzx 我的意思是. 空余时间固定, 拿来干嘛都行.

    拿来刷题, 比大部分事都强.
    kera0a
        17
    kera0a  
       2020-06-09 12:39:26 +08:00 via iPhone
    非常非常赞同!
    Perry
        18
    Perry  
       2020-06-09 12:43:42 +08:00
    不过其实这些算法本科内容都学过,只是刷题能更好地巩固之前学的。
    NtosKiking
        19
    NtosKiking  
       2020-06-09 12:48:32 +08:00
    之前做过一段时间的 LeetCode 题目,工作中为展示体现父子层级关系功能的时候用到了刷题学到的利用栈进行深度优先遍历的思路。不得不说,多做题学习思考后解决问题的思路会更多。
    ericgui
        20
    ericgui  
    OP
       2020-06-09 12:48:34 +08:00
    @skys215 第一个的仅仅是问了一下,刷算法是否对日常工作用实际的帮助,以及日常是否用到算法

    一个非常简单的问题
    daozhihun
        21
    daozhihun  
       2020-06-09 13:20:26 +08:00
    刷 lc 肯定是有用的,虽然直接能用到的很少,但还是能培养自己的思维能力和严谨性,在思考别的问题的时候思路会开阔很多
    不过我不赞成过度地刷 lc (尤其是某些公司面试喜欢出一些很偏门的问题),那样在考察候选人的时候反而本末倒置了,除非是专门招搞算法的
    yaphets666
        22
    yaphets666  
       2020-06-09 13:32:17 +08:00
    我是有一次 我前端做一个表格树 后端提供一个树形数据 但是没有 "合计" 这个时候我就没有头绪 开始明白刷题和学习算法的意义了
    miaomiaoweiwei
        23
    miaomiaoweiwei  
       2020-06-09 14:03:50 +08:00
    是的 非常赞同你的说法 可以开拓思路
    Dogergo
        24
    Dogergo  
       2020-06-09 14:38:20 +08:00
    @dswyzx 会,实际上刷抖音,如果你看评论的话,我想不超过 10 分钟,你会认为自己脑子没了,是他们不正常还是自己不正常
    gadsavesme
        25
    gadsavesme  
       2020-06-09 14:41:06 +08:00
    对于一些从不判断边界值空指针的,还有一些简单的循环树形结构啥的都搞不清楚的,我反正一律都建议可以多刷刷 lc
    Coolha
        26
    Coolha  
       2020-06-09 15:01:59 +08:00
    @Dogergo 哈哈哈哈哈哈,微博也是这样
    LYEHIZRF
        27
    LYEHIZRF  
       2020-06-09 15:08:04 +08:00
    当然 学过算法以后 实现代码首先会考虑复杂度
    liuxingdeyu
        28
    liuxingdeyu  
       2020-06-09 16:07:54 +08:00
    还有就是,边缘情况考虑的更多了
    lxd152
        29
    lxd152  
       2020-06-09 19:55:51 +08:00
    算法能把你带到不同的高度
    leven87
        30
    leven87  
       2020-06-09 20:10:19 +08:00 via iPhone
    术业有专攻,基础肯定要有,但多深入看个人。我是看个算法半年肯定忘记的
    lithbitren
        31
    lithbitren  
       2020-06-09 20:12:35 +08:00
    竟然能碰到 dp 的场景
    skys215
        32
    skys215  
       2020-06-10 10:12:52 +08:00
    @ericgui 这篇不是(续)吗,我想看前篇,在求链接
    volvo007
        33
    volvo007  
       2020-06-12 13:07:46 +08:00 via iPhone
    最近遇到的问题是最短路径和马尔可夫链,搁以前肯定懵了,估计连用什么模型去解决都不知道。刷完题之后轻松解决,还是很有帮助的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2490 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 15:40 · PVG 23:40 · LAX 07:40 · JFK 10:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.