二分法的适用条件:
时间复杂度是 O(logn)
时间复杂度是O(n!)的是:全排列
**时间复杂度是O(2^n):**和组合有关系,和01串的组合类似,在每个位置,选左边是0,选右边是1。一定会走到第n层才会结束,每层都是向左走,向右走,所以是有两种选择
计算递归的时间复杂度:
方法1: 树状图,看有多少个点,每个点被调用多少次,每个点上面的处理的时间复杂度: 有多少个点 * 每个点被看的次数 * 每个点被处理的次数
方法2:本质上是做什么,本质上是把所有路径找一遍,还是hash表这样每个位置记一次
搜索和枚举的区别:
搜索不能通过for循环一个个列出所有方案,而是需要通过递归
递归有两种实现方式:
分治法 、 遍历(?)
动态规划的两种实现方法:
多重循环 记忆化搜索
动态规划的多重循环也有两种实现方法:
自底向上的实现方法,自顶向下的实现方法
LCA = longest Common Ancestor 最长公共祖先
LIS = longest Increasing Subsequence 最长上升子序列
LCS = longest Common Subsequence 最长公共子序列