算法总结

递归

  • 定义一个函数,在函数内调用函数本身
    • 定义好返回条件
    • 想好要传的参数

迭代

  • 通过循环语句重复执行,直到达到边界条件 跳出循环

DFS 深度优先、

  • 沿着一条路走到头,走到头后遍历兄弟节点,遍历完后往回走一步,然后再遍历兄弟节点,再往回走一部,直到遍历完所有节点
  • 一般配合递归来实现
  • 典型的题目(HJ93 数组分组): https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86?tpId=37&tqId=21316&rp=1&ru=/ta/huawei&qru=/ta/huawei&difficulty=&judgeStatus=&tags=/question-ranking
  • 凑数求和:https://www.nowcoder.com/practice/11cc498832db489786f8a03c3b67d02c
  • 题解:https://blog.nowcoder.net/n/a6b71a5651874650a65945e9bae8e5bf

BFS 广度优先

- 两层循环:第一层用while循环每次循环深度+1,第二层循环用于遍历当前深度的所有节点
- 典型的题目:
  - https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/submissions/
  - https://leetcode-cn.com/problems/open-the-lock/

动态规划

  • 首先我们直到最初的小问题的答案,我称为边界答案,然后通过边界答案可以得出下一步的答案,循环得出下一步的答案,直到最终问题得到解决
  • 关键是要找到边界答案和找出转换公式
  • 典型题目:https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b?tpId=37&tqId=21314&rp=1&ru=/ta/huawei&qru=/ta/huawei&difficulty=&judgeStatus=&tags=/question-ranking

  • 先进后出
  • 可以通过递归的方式获取到所有可能的出栈顺序
    • 第一步:压入第一个栈
    • 判断是否还可以入栈,可以的话递归入栈
    • 判断是否还可以出栈,可以的话 递归出栈
  • 典型题目:https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109?tpId=37&tqId=21300&rp=1&ru=/ta/huawei&qru=/ta/huawei&difficulty=&judgeStatus=&tags=/question-ranking

你可能感兴趣的:(算法总结)