我在美国拿到的时候是一本新书。
这本书我已经读过好几遍了,但是我真的不推荐给初学者。
以这本书为例。 给我印象最深的是,当我开始回答问题的时候,这本书绝对充当了反面教材的角色。 有很多事情你无法理解,也很难理解。 写得很好。 内容很全面,但我认为不适合初学者。 事实上,直到我完成考试之后,我才发现这本书的价值。 考试的内容和注意事项很多。 其实这本书什么都有,只是内容太多,初读时找不到重点,实在不适合初学者。
这也是大多数算法书籍的通病,因为它的受众不是回答问题,而是教授,所以注重完整性和细节。 如果硬要推荐的话,我推荐《算法4》和《CC150》,这两本书是比较符合面试算法的。 《CC150》是专为程序员面试而设计的。 你可以看书,但看书和说实话永远是最后的手段。 最好让知识渊博的人指导您解决问题,或者参加专门为帮助您回答面试问题而设计的现有免费或付费在线课程。 网上资源太多了,根本不需要看书。
第一次刷的时候特别痛。 每天就3个问题,持续了两个月。 后来刷的次数多了,一天5行,然后是10行,一天15行。 使用两次后,每天可以做30次而不累。 以目前的水平,我们每天可以做100门课程。 毕竟很多题太熟悉了,打字而已。
我简单说一下我认为写题的阶段。
其实我觉得前四个阶段,不叫“测试”。 它正在做题和学习。 只有第四遍才叫刷题。 没有人第一次知道,大多数人都想尽快完成。 直接做题就行了,不管基础知识。 很多人甚至不了解Tree、BIT、Trie、Union Find等数据结构。 遇到了就刷一下,心里想,怎么可能搞清楚呢?
所以,答题最重要的第一步就是了解所有的数据结构、解题方法、基本算法。 从基础数据结构,到双端队列,再到各种解题基础算法,各种排序算法,DFS、BFS、扫线等等,99%的人都没学过这些题,就直接做题了。 做了两道题后,他们认为自己可以解决类似的题。
如果回答问题这么简单的话,大家都可以进去了。
不可能的。 我告诉学生的方法是第一时间看答案。 第一次过题的时候,很多题其实都是同样的方法,只是做的时候不知道。 然后当我做不到时我感到沮丧。 事实上,方法是错误的。 所以第一遍我就是看答案,最优解,知道解决的问题是什么,理解所有的算法、原理、例程。 建立比较完整的回答问题的思维体系。 只有这样,当你遇到不知道的问题时,你才能有正确的想法和最优解的方向感。 否则,仅仅尝试几个问题是不可能找出最优解的。
这里再多说几句。 许多人反对第一次阅读问题和查看答案,认为他们必须自己做。 当我第一次做题的时候,我举了几个例子。
LC 76 我想不到。 当我看到这个答案的时候,我觉得这个解决方案真是太棒了。 做了很多之后,我发现有一种方法叫做LC 76。
LC 56,看了答案才发现还有扫描线算法。 之前我想了很多,但都想错了方向。
LC 200,看似简单的dfs,bfs,最后是洪水填充。 。 。
LC 215,快速
相信大家都遇到过这种情况,当数据结构不好的时候,不知道它是什么,也不知道如何使用。 我从来没听说过。
所以现在回想起第一次刷的时候,我觉得花那么多时间思考实在是浪费时间,因为思考问题和想法很重要,但时间不应该花在思考这些现有的问题上。固定方法。 数据结构方面,如果我在做这道题之前了解了数据结构和算法,那么我至少应该有一个思考的方向。 即使你想错了,你仍然可以说,啊,这个问题应该解决而不是发现,嘿,有这样的方法! 还有一种数据结构叫!
就像学习数学一样,如果你知道1、2、3,但不知道4、5、6,你怎么算2+5呢?
至少你应该认识所有 10 个数字,然后进行加、减、乘、除!
所以我认为不值得在这个基本点上浪费时间。
与其这样做,不如第一次看答案,用题练习补充,学习别人的最优解,建立思维体系,补充数据结构,补充算法知识。 但第二次,就是你真正思考的时候了。 这样做,丝毫不耽误锻炼思维过程和逻辑基础。 这是我回答了这么多问题后最快解决问题的方法。 现阶段,我认为没有其他办法。
第二次是你自己想一想。 第一次你已经有了思考,现在你需要培养解决问题的能力。 很多题看了第二遍,感觉自己以前没做过,这很正常。 没有人能记住他们第一次出现。 但这个时候你需要先自己写答案,因为你往往已经有了大概的方向感和目标,或多或少可以自己写。 然后自己尝试写一下,加深印象。
第三次就是再过一遍。 一旦你熟练了所有的套路,你就需要牢牢地记住它们。 第四次,我觉得我需要脱离LC,去做面试,看看公司是怎么面试问题的。 如果您的目标是在北美找到工作。
另外不建议刷800,主要刷前400就够了。 毕竟,能完成前400个并能理解它的人,十人之中只有两到三个人。
事实上,这些事情说起来容易做起来难。 其实每次都是比较痛苦的,需要一个循序渐进的过程。 我不是天才。 达到现在的水平,我基本上是全日制学习,上课当副业,需要8-9个月的时间。 从数量上来说,我留学两年多,回答了3000多个问题。 如果你不重复任何问题,那么你已经做过数千次了。 后来我把前400道LC题的答案全部录制成视频,用了近半年的时间。 所以不是看一个善于解决问题的人就聪明,而是看他踏踏实实的努力。
毕竟,最快的捷径就是没有捷径。
当然不是每个人都需要这样做。 公司面试的很多问题都没有那么难,很多花了2300的人都幸运地进去了。但是如果你想看到一个问题之后有一个想法并且能够写出来,如果你想有这种硬实力的话,我想至少需要4、5个月的时间。
我也见过天赋极高的人,也有只花了100多积分的人。 经过一番交谈,他们发现自己的想法特别正确。 我觉得我必须仔细阅读两次才能得出这些总结性的想法。 还有沟通能力极强的,年龄超过60岁,在各个商店工作过,解决过各种需要提示沟通的暴力问题。 但我也说了,这肯定不行,只是个商店而已。
这是我写的分类顺序表。 每个问题都按照先简单后困难的顺序划分。 初学者如果遵循以下步骤,会更有效率:
分类顺序表: