算法题基本上刷过就忘 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
howencilx
V2EX    程序员

算法题基本上刷过就忘

  •  
  •   howencilx 2020-08-12 07:22:12 +08:00 via iPhone 6951 次点击

    大家都是怎么刷的?

    第 1 条附言    2020-08-13 10:53:35 +08:00

    非常感谢大家的回复 谢谢

    33 条回复    2020-08-14 10:03:05 +08:00
    andrewpsy
        1
    andrewpsy  
       2020-08-12 07:36:57 +08:00 via Android   19
    和世界上提高大部分事物的方法没什么区别:次数加深度。

    对于经典题,我一般是实现多解,明白不同解法的利弊。比如有些动态规划的题可以用贪心算法扫一遍就有解了,我非得把它的 top-down 和 bottom-up 也搞一下。

    你在一道题上花的时间越多就越难忘,捷径是留给比我们聪明的人的。
    loading
        2
    loading  
       2020-08-12 07:50:23 +08:00 via Android   1
    应聘也就抱佛脚。
    平时使用只要知道对应算法优劣和场景,需要的时候能想起来名字就行了。

    现在生活中我也就二分和普通冒泡了…
    howencilx
        3
    howencilx  
    OP
       2020-08-12 08:00:38 +08:00 via iPhone
    @andrewpsy 感谢建议
    cassyfar
        4
    cassyfar  
       2020-08-12 08:09:48 +08:00
    可以读下算法导论。干刷 leetcode 基本等于背答案,其实得不到太多解题思路。
    richzhu
        5
    richzhu  
       2020-08-12 08:27:07 +08:00
    我觉着二楼说的没错呀,只要知道哪个算法适用于哪个场景,需要的时候能想起来就好了,至于刷题,纯属是为了面试
    metaquant
        6
    metaquant  
       2020-08-12 08:31:31 +08:00
    没刷过 leetcode,主要刷了 project euler,我自己的习惯是每做完一道题就写一个详细的思路分析,这样之后回顾起来能很快找到思路。另外,就是去搜集一下之前以前大神的解法,争取每道题的算法都做到最优,如果有多种解法,就把多种解法的思路都写下来。

    有兴趣的话,可以看一下: https://metaquant.org/
    TwoDogSon
        7
    TwoDogSon  
       2020-08-12 08:33:40 +08:00
    最近外界刚需 开始刷题 先从简单的开始 找自信 然后再中等难度 我应试复习法 能 pass 就好 今天没做出来的 看题解理解会 明天独立完成一边
    masker
        8
    masker  
       2020-08-12 08:37:51 +08:00 via Android
    不靠理解靠硬背吗
    ericls
        9
    ericls  
       2020-08-12 08:53:29 +08:00 via iPhone
    不要玩儿算法这个游戏
    Accessing
        10
    Accessing  
       2020-08-12 09:22:20 +08:00   2
    会忘很正常,只有经常使用才不容易忘,尽量创造使用场景吧。
    Accessing
        11
    Accessing  
       2020-08-12 09:23:25 +08:00
    如果不想使用,只想考试的话,那忘掉就忘掉,没有什么关系,下次考试之前再复习即可。
    mathzhaoliang
        12
    mathzhaoliang  
       2020-08-12 09:44:05 +08:00   1
    @metaquant 我看了一下你的笔记,写的不错,能详细查资料写分析是很难得的了。

    projecteuler 上的问题其实不太适合拿来练习算法,因为上面的问题大多数具有较深的数学背景,不懂得背后的数学,仅套用递归、分治、动态规划等常见算法得不出有效解来的。

    举个简单的例子:你的置顶文章里面的整数分划问题。你那个递归其实跟斐波那契递归一样,效率很低,指数级爆炸。

    实际上 p(n) 有一个 pentagon recurrence 关系,用那个来做递归计算效率高很多。
    另外输出所有分划是有一个简单的线性遍历方法的,空间复杂度是 n+1,时间复杂度是 p(n)。
    kidlj
        13
    kidlj  
       2020-08-12 09:47:15 +08:00
    编程不是智力游戏,是熟练运用工具。
    leiuu
        14
    leiuu  
       2020-08-12 10:16:46 +08:00
    @kidlj 赞 刻意练习
    wenb1
        15
    wenb1  
       2020-08-12 10:57:41 +08:00
    同感
    fadaixiaohai
        16
    fadaixiaohai  
       2020-08-12 11:10:08 +08:00
    记录下自己的刷题思路,下次浏览一下,立马就记起来了
    EreeBay
        17
    EreeBay  
       2020-08-12 11:25:38 +08:00
    没办法,更多时候就是为了应付面试
    birdkyle79
        18
    birdkyle79  
       2020-08-12 11:40:34 +08:00
    很多模式化的题,场景相似的,一般都能很快磕出解法,实在不行也能硬解,这些题一般都有很强规律,也容易触类旁通。

    但是一些没有规律的,技巧性很强的题目,想出解法很难,就算写出来了也很快会忘,这很正常,总之,面向面试刷题就行了。
    hello2060
        19
    hello2060  
       2020-08-12 11:46:26 +08:00
    @cassyfar 算法导论不如 leetcode, 光是基本的数据结构 array stack list queue priority queue 算法导论里就很大一部分了,动态规划就三个例子,然后就是面试里不算多的图。算法导论就是介绍一个东西,这是啥,有啥用,复杂度是多少 (花了很多时间在推导复杂度上了)。leetcode 则需要你反应过来我需要用这个,这两个不是一个层次的东西。当然没有算法导论里的那些基础,leetcode 也没法刷。。
    lewis89
        20
    lewis89  
       2020-08-12 12:02:02 +08:00
    背模板代码.. 然后往里面套 没啥好办法
    lewis89
        21
    lewis89  
       2020-08-12 12:03:13 +08:00
    @hello2060 #19 毕竟是学术的东西,实际工作中谁没事推复杂度,都是先上线跑跑 估一下复杂度 不行再优化
    guchengyehai1
        22
    guchengyehai1  
       2020-08-12 12:18:29 +08:00 via Android
    一般人只有一遍一遍的刷,死磕精神
    raaaaaar
        23
    raaaaaar  
       2020-08-12 12:24:42 +08:00 via Android
    吃透一道题,而不是刷题。什么意思呢。

    每道题都对每种题解画图,分析,最后才写代码,分析时间复杂度,每道题最后写一篇完整的题解发出去。

    一道题会设计各种数据结构和算法知识,大概一道题要花几天时间吧,反正过了几个月,到现在我都还记得我刷的一些题大概是些什么,有什么方法。

    我不看重数量,只看质量,你能高质量刷几道,你试一试再对比一下就知道了。
    mtrec
        24
    mtrec  
       2020-08-12 12:50:28 +08:00 via Android
    按类型由浅入深刷 一边刷一边总结 同一类其实有框架的
    ericgui
        25
    ericgui  
       2020-08-12 12:58:09 +08:00
    讲课,录制出来,放在 b 站

    我就是这样的

    如果我能讲得出来,说明我就能理解这个题

    而且我自己还经常看自己的视频来复习呢。。。。

    https://space.bilibili.com/9099840/channel/detail?cid=89640
    metaquant
        26
    metaquant  
       2020-08-12 13:10:04 +08:00   1
    @mathzhaoliang 如果你往后看,会发现我在七十八题硬币分组(Coin partitions)用了 p(n)的递归关系,因为七十六题问题规模比较小,就直接用了普通的递归算法。

    prject euler 确实数学味比较重,这也是相对于 leetcode 我更喜欢刷 project euler 的原因
    charlie21
        27
    charlie21  
       2020-08-12 13:39:05 +08:00
    慢即是快。
    mathzhaoliang
        28
    mathzhaoliang  
       2020-08-12 14:33:25 +08:00
    @metaquant 看到了,你用的那个就是 pentagonal recurrence 。
    dream4ever
        29
    dream4ever  
       2020-08-12 15:37:43 +08:00
    没有应用到实际工作中的知识,自然会忘。就像上学时候的考试,啃了一个学期课本,即使期末考个高分,只要后面不再用到,照样忘得一干二净。
    kekeekehernando
        30
    kekeekehernando  
       2020-08-12 21:17:31 +08:00
    我刷了三遍( 500 道左右)还不会做的时候的很怀疑自己的算法能力
    然后休息了一段时间之后 最近开了第四遍 觉得自己解题能力进步很多了
    所以就
    多刷多刷 隔一个周期 cool down 下大脑
    windliang
        31
    windliang  
    PRO
       2020-08-13 00:37:05 +08:00
    之前顺序刷到 300 题的一些感想,可以做些总结

    https://zhuanlan.zhihu.com/p/141518463
    Yano
        32
    Yano  
       2020-08-13 09:50:30 +08:00
    PythonYXY
        33
    PythonYXY  
       2020-08-14 10:03:05 +08:00
    practice makes perfect
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5531 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 116ms UTC 07:27 PVG 15:27 LAX 00:27 JFK 03:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86