高效正确使用LeetCode

Leetcode4年前 (2020)更新 bruce
515 0
内容纲要

目标

刷了两遍LeetCode,只做了前200道

LeetCode练习准备

  1. 面试一般都是给一张白纸或者在线解题;
    2.解题完,要多参考各种答案,对比各种解题思路;
    3.刷题练习,有目的针对性,按照难易度、按照Tag标签等,对题目进行优先级排序;
    4.总结强化记忆,利用LeetCode在线笔记,对解题做必要的备忘笔记。反复强化复习加深理解与记忆,不会边刷边忘;
    5.持之以恒坚持不懈,每天有编程的习惯或者指标,这样才能保证自己一直处在编程的状态下,同时还要保证兴趣,不要让编程感到痛苦,当在兴趣与持续编程状态下,编程水平就会处于一个逐渐上升的过程中。

刷题与面试思路

宽泛与精练结合

参考阅读技巧,有泛读与精读。刷题按照优先级,先对一个阶段进行宽泛快速的通过,再反过来不满足于一种解题方案。

看懂题目

看懂题目是寻找一道算法题最优解的前提。
LeetCode 上的题大致分为三种类型:

  • 考察数据结构,比如链表、栈、队列、哈希表、图、Trie、二叉树等
  • 考察基础算法,比如深度优先、广度优先、二分查找、递归等
  • 考察基本算法思想:递归、分治、回溯搜索、贪心、动态规划等

标题或题目描述中给出明确的题目类型信息,比如二叉树的重建、链表的反转。

而有一些题目中则在条件中给予暗示 :

  • 设计一个 O(nlogn) 的算法(分治:在一颗搜索树中完成任务,对于数据排序)
  • 给定一个有序数组(二分法)无需考虑额外的空间(用空间换时间上的优化)
  • 数据规模大概是 10000(O(n^2)就可以)
  • 问题可以被递归解决(动态规划)

当你拿到一道算法题的时候,先去弄明白这道题目要考察的是什么,是简单的数据结构还是复杂的算法思想。先去理清题目背后解题技术大方向。

面试中别太注重完美主义

Done is better than perfect 。实现比完美强。

公司面试算法面试题80%都是 Medium 级别及以下,希望面试者能在 20 分钟以内给出相对正确的方案。

每一道算法题得解法都有很多种,并不是说你没有给出完美解或者最优解你就是错的。

“正确” 本身是一个相对概念。在算法面试或者平时的算法练习时,如果没有头绪,可以尝试使用暴力解法。

不要忽视暴力解法。暴力解法通常是思考的起点。当你使用了暴力解法之后,可以与面试官进行沟通优化,把这个过程看作是和面试官一起探讨一个问题的解决方案的过程,这也可以让面试官了解你的思考问题的方式。这也是一个“正确”的回答方式。

常识认知

  • 算法转化为代码:算法理论先行
  • 边界条件:空检测
  • 规范性:变量名、模块复用
  • 最好总结需要长期反复实验
  • 刷 LeetCode 很吃力很正常
  • 多刷一道题,就会懂多一点

刷题内容排序

按Tag做题

链表,二叉树,回溯,深度宽度优先遍历,图,贪心,动规,数组,哈希表……每个Tag由easy到hard,每道题先自己思考,不会的参考了一个开源的解答或者参考论坛或者博客。

开始的时候自己独立思考的时间比较长,后来没了耐心,不会的题目就马上看解答了。一般题目解法有多种,这时候最好尝试一下其他的做法,至少要知道思路。比如有关图的题目就会有DFS和BFS两种解法。Discuss里一般都会有高质量的解答。关键是每道题都要弄明白。

一开始用IDE,跑出正确结果,再在线默写代码。后来写的多了,直接在线写代码了。这是一个自然的过程,做的多了就有“手感”了。总结一下,按Tag由易到难,每道题弄清楚,知道其他的解法,这是核心!搞定了核心,其他的技巧都是锦上添花了。

备忘单

按照难易程度 Easy 、Medium、Hard

© 版权声明

相关文章

暂无评论

暂无评论...