跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?
未分類
15 12 月 2020

刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?

刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?

資深大佬 : hakunamatata11 6

放弃刷题后,我拿下了 4 家 offer 。分别是:百度、Shopee (虾皮),蘑菇街和一家创业公司(字节三面挂,鹅简历挂)。

我放弃盲目刷题的直接原因是——效率真的是太低了。来算笔账:

  • LeetCode/LintCode 的题目有近 2000 道,每天刷 5 道,刷穿要花 1 年半。
  • 退而求其次,把每个知识点所覆盖的题目各刷 10 道,起码也要刷 200 道题,接近 3 个月。

刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?

最重要的是,就算你刷了 200+、300+题,也未必能通过算法面试。不信你点开 LintCode,随机点开 1 题,如果你能马上找到思路并解出答案,那我只能说

刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?

在心里默念了无数次“我是傻逼”和进行了无数次无能狂怒后,我找到了一个“作弊神器”——算法小抄。

这份算法模板是《九章算法班》的令狐冲老师整理,包括了算法和数据结构的常见考点,列举了常见题目的使用条件、复杂度、代码模板,还附上了参考例题,感兴趣的朋友可以参考一下。

刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?

接下来,奉上这份算法小抄的绝佳使用方式。

Tips 1:打开LintCode,筛选算法和数据结构知识点。

刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?

拿二分举例。

  • LintCode14 . 二分查找(在排序的数据集上进行二分)
  • LintCode460. 在排序数组中找最接近的 K 个数(在未排序的数据集上进行二分)
  • LintCode437.书籍复印(在答案集上进行二分 )

套上模板,时间复杂度:O(logn),空间复杂度:O(1)。

Tips 2:根据模板,做题:

 public class Solution {         /**         * @param A an integer array sorted in ascending order         * @param target an integer         * @return an integer         */     public int findPosition(int[] nums, int target) {     if (nums == null || nums.length == 0) {     return -1;             }      int start = 0, end = nums.length - 1;             // 要点 1: start + 1 < end     while (start + 1 < end) {             // 要点 2:start + (end - start) / 2     int mid = start + (end - start) / 2;                 // 要点 3:=, <, > 分开讨论,mid 不 +1 也不 -1     if (nums[mid] == target) {     return mid;                 } else if (nums[mid] < target) {                     start = mid;                 } else {                     end = mid;                 }             }              // 要点 4: 循环结束后,单独处理 start 和 end     if (nums[start] == target) {     return start;             }     if (nums[end] == target) {     return end;             }     return -1;         }     }     

做完例题后再自己找几道题练练手,你基本就能把这套模板用得炉火纯青了。其他算法和数据结构知识点以此类推。用了一次后,我只想说——牛逼!

当然,使用代码模板解题的前提是要学会判断这道题能用哪种方法解题,令狐冲老师在《九章算法班》里也做了整理:

二分

排序数组 (30-40%是二分)  当面试官要求你找一个比 O(n) 更小的时间复杂度算法的时候(99%)  找到数组中的一个分割位置,使得左半部分满足某个条件,右半部分不满足(100%)  找到一个最大 /最小的值使得某个条件被满足(90%)  

双指针

滑动窗口 (90%)  时间复杂度要求 O(n) (80%是双指针)  要求原地操作,只可以使用交换,不能使用额外空间 (80%)  有子数组 subarray /子字符串 substring 的关键词 (50%)  有回文 Palindrome 关键词(50%)  

BFS

拓扑排序(100%)  出现连通块的关键词(100%)  分层遍历(100%)  简单图最短路径(100%)  给定一个变换规则,从初始状态变到终止状态最少几步(100%)  

二叉树与分治

二叉树相关的问题 (99%)  可以一分为二去分别处理之后再合并结果 (100%)  数组相关的问题 (10%)  

更多算法和数据结构的使用条件,可以听令狐冲老师的免费讲座《 FB 面试官揭秘面试技巧:如何刷 100 题胜过别人刷 300 题》。

如果你能把这套模板摸清楚,遇到题目基本都能轻松破解,从刷了忘、忘了刷变成每刷一遍就巩固一遍代码模板,直到把它记熟记透,在面试中做到游刃有余。

接下来分享一个核心观点:刷题是为了应对面试,因此我们要针对性地刷题,不刷无意义的题。

所以,除了背熟模板,我备战面试的基本策略是在面试前 2 周突击刷该公司的面试真题、高频题。可以在 LintCode 的阶梯训练上刷对应的企业真题。

刷 leetcode 经常陷入刷了忘忘了刷的尴尬局面怎么办?

正式成为社畜后,我也不再抱着那么功利的心态去刷题。现在我每周会刷 2-3 道题,更多的是锻炼自己的逻辑思维能力,也为了预防一些不时之需(如跳槽)。

现在刷题反而会给我一种别样的快乐,尤其是找到了一种新的思路解题,或是攻克了之前一直感到头疼的动态规划。

当你获得了这种满足和成就感,刷题对你来说就不再是一件痛苦的事,也就不会陷入“刷了忘忘了刷”的困局了。

大佬有話說 (0)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具