刷题方法


一般方法

记忆细节,反复练习
打破惯性,机器思维

练习重点

分治、回溯、递归、动态规划

核心思维

升维
空间换时间

刷题技巧

outliers

  • Chunk it up 切碎知识点
  • Deiliberate practicing 刻意练习
过遍数(五) 
刷题第一遍 5~15分钟思考
直接看解法,多解法的比较解法优劣
刷题第四遍/第五遍 的时候一定要上英文站 discuss board 中 查看 Most Votes 中最高票的前三个回答
练习缺陷,弱点的地方  
不舒服,不爽,枯燥  
生活中的例子: 乒乓球,台球,玩游戏等
  • Feed back 获得反馈

    主动型反馈 (自己去找)

高手代码  
    github  
    Solution from leetcode, discuss pannel in leetcode

被动型反馈

code review  
教练看你打,给你反馈

切题四件套

  • clarification 明确题意(询问题目细节、边界条件、可能的极端错误情况,即数据范围)
  • Possible Solution (所有可能的解法都和面试官沟通一遍)
    • compare(time/space) (时间复杂度 & 空间复杂度)
    • optimal 所有可能选最优 (最优解)
  • code (写代码)
  • test cases(测试用例: 正常的测试,边界条件,变态的情况,错误的输入)

数据结构

一维:

  • 基础:

    数组 array(string) 链表 linked list

  • 高级:

    栈 stack, 队列 queue, 双端队列(deque), 集合(set),映射 map (hash or map), etc

二维:

  • 基础:

    树 tree, 图 graph

  • 高级:

    二叉搜索树 binary search tree(red-black tree, AVL), 堆 heap, 并查集 disjoint set, 字典树 Trie, etc

特殊:

  • 位运算 Bitwise, 布隆过滤器(BloomFilter)
  • LRU Cache

算法

  • if-ele, switch --> branch
  • for, while loop --> iteration
  • 递归 Recursion(Divide & Conquer, Backtrace)
  • 搜索 Search 深度优先搜索 Depth first search, 广度优先搜索 Breadth first search, A*, etc
  • 动态规划 Dynamic Programming
  • 二分查找 Binary Search
  • 贪心 Greedy
  • 数学 Math, 几何 Geometry

注意:
在头脑中回忆上面每种算法的思想和代码模版

编辑器

vscode

安装 leetcode plugin

top tips vscode/vscode 使用技巧

功能 快捷键
打开快捷键一览表 ctrl k + ctrl s
跳到行尾/首 command + left/right
选中整行 shift+ cmd + left/right
删除一行 cmd + shift + k/ cmd+x
删除光标前面一个单词 option+delete

idea

功能 快捷键
显示意向动作和快速修复代码 Option + Enter
显示最近打开的文件记录列表 command + E

自顶向下的编程方式

https://markhneedham.com/blog/2008/09/15/clean-code-book-review/

关键的函数放上面,子函数放下面

练习重点

动态规划,搜索,回溯,递归

优化的思路

空间换时间
升维

懵逼的时候

找最近重复子问题 找最优重复性(动态规划)

其它生活中的例子

  1. 凯利公式 Kelly Formula
  2. 博弈论 Game Theory