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

算法题基本上刷过就忘

  •  
  •   howencilx · 2020-08-12 07:22:12 +08:00 via iPhone · 6197 次点击
    这是一个创建于 1346 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家都是怎么刷的?

    第 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
    没办法,更多时候就是为了应付面试
    bear2000
        18
    bear2000  
       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  
       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   ·   我们的愿景   ·   实用小工具   ·   2832 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:02 · PVG 22:02 · LAX 07:02 · JFK 10:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.