算法刷提建议 15

333 阅读2分钟

数据结构是工具,算法是通过合适的工具解决特定问题的方法。学习算法之前,先了解常用的数据结构(特性和缺陷)。

LeetCode 刷题建议

  • 先刷⼆叉树(最容易培养框架思维,且大部分算法技巧本质上都是树的遍历问题)(试着从框架上看问题,不要纠结细节问题)

    • 纠结细节问题,如纠结 i 到底应该加到 n 还是加到 n - 1,这个数组的大小到底应该 n 还是 n + 1?
    • 从框架上看问题,就像如下示例基于框架进行抽取和扩展。既可以在看别人解法时快速理解核心逻辑,也有助于找到我们自己写解法时的思路方向。
    • 当然,如果细节出错,你得不到正确的答案。但是只要有框架,你再错也错不到哪去,因为你的方向是对的。但是,你要是心中没有框架,那么你根本无法解题,给了你答案,你也不会发现这就是个树的遍历问题。
  • ⼏乎所有⼆叉树的题⽬都是⼀套下面这个框架就出来了。只要把框架写出来,然后往相应的位置加代码就可以。

 void traverse(TreeNode root) {
     // 前序遍历代码位置
     traverse(root.left);
     // 中序遍历代码位置
     traverse(root.right);
     // 后序遍历代码位置 
 }
  • 对于一个理解二叉树的人来说,刷一道二叉树的题目挺快。不妨从二叉树入手,前 10 道也许有点难受。结合框架再做 20 道,也许你就有点自己的理解了。刷完整个专题,再去做回溯动规分治专题,你就会发现只要涉及递归的问题,都是树的问题。