不要在准备工作上花费太多时间。不要在准备工作上花费太多时间。
如果您花太多时间学习,您将永远无法解决Leetcode/CTCI问题。相反,如果您在准备工作上花费的时间太少,就会迷失方向。重要的是您要花费适当的时间进行准备工作,以确保您不会浪费时间。
在执行任何操作之前,请确保阅读/学习以下主题。学习任何其他内容可能会浪费您的时间。有些人学习的方式超出了他们需要的方式(花式图算法,生成树,A*等),因为他们认为这将使他们成为更好的工程师。偶认为那完全是浪费时间。大多数采访者自己都不记得这些话题。一旦找到理想的工作,就可以自己学习。不要浪费时间。只需关注下面的数据结构和算法,仅此而已。
数据结构
动态阵列链表堆叠与排队哈希表二进制搜索树二进制堆和优先级队列图表算法
位操作和数字-差异无符号与有符号排序稳定性合并排序快速排序堆排序-就地排序以获取O(1)空间二元搜寻排列
子集BFS图DFS图Dijkstra算法拓扑排序
准备工作
一旦您对上面的数据结构和算法感到满意,请多次进行以下练习(至少2–3次),直到您可以闭上眼睛进行练习。
从头开始实现ArrayList反向链接列表使用数组实现堆栈和队列用简单的哈希函数实现哈希表使用邻接表实现图,然后为BFS和DFS编写函数。递归和迭代地编写二进制搜索算法编写合并排序算法编写快速排序算法使用DFS(按顺序,前顺序和后顺序-它们全部三个)和BFS二叉树。
记住常见算法的时间和空间复杂性和了解这些重要的位操作技巧。这些可能是你入门生涯中最困难的时刻。一方面,偶希望你认真对待所有这一切。另一方面,偶希望你意识到自己会记住并珍惜这些时刻。在获得梦想的工作之后,您实际上会错过这些艰苦的工作和努力解决算法难题的宝贵时刻。