Skip to content

Latest commit

 

History

History
55 lines (33 loc) · 2.03 KB

刷题方法.md

File metadata and controls

55 lines (33 loc) · 2.03 KB

刷题方法

1.审题先判断陷阱。

看到题目第一先看是否有时间复杂度、空间复杂度的要求。(比如大数问题、递归多了栈溢出等问题)

根据自己猜测判断使用简单方法,还是复杂方法来做,毕竟我们没有时间去做两遍题目。

然后再顺便看下是否需要判断边界条件(一般都需要出错判断)

有时间复杂度要求的,可以优化排序、动态规划、以空间换时间等

有空间复杂度要求的,可以用循环代替递归、动态规划代替递归等

这里讲下为什么不说贪心,第一理论上所有贪心可以解决的问题都可以用动态规划来做,第二正因如此,许多公司难题也就只考到了动态规划。

所以请一定一定要掌握动态规划。

2.联想。

我们遇到题目时要把题目和以前做过的题联想下,通过类似点,找出突破点。

  1. 字符串问题====》正则
  2. 链表、数组问题====》双指针
  3. 数组问题====》利用数组下标来做====》有时需要额外数组==》此外大部分要考虑二分法优化时间复杂度
  4. 多维数组问题====》降维来做。
  5. 复杂问题、优化问题====》动态规划
  6. 排列问题====》递归、回溯
  7. 数论问题====》找规律、动态规划
  8. 树的问题====》递归、深度遍历、广度遍历====》栈、队列
  9. 次数问题====》哈希表存储(js中建议使用{},而不要使用ES6中的Map)
  10. 大小值问题====》栈、队列、哈希表做存储
  11. 从前往后、从大到小比较复杂====》从后往前、从小到大思考。
  12. 动态规划重点了解
  13. 位运算也了解一下

3.必须掌握算法

快排和归并排序、深度和广度遍历、二分查找(能手撕)

动态规划、回溯法。

要专门根据题目分类去刷这些算法。

4.多画图。

,如链表、二叉树等一定要画图。

涉及概率的问题,可以画圈圈来交、并、补。

对于点线的问题,可以画坐标系。

5.多举例