递归
    递归利用的实际是系统栈
    (调用子函数时候会销毁上一个函数的执行过程,一旦有了返回值就会重建之前的执行过程)
    (返回值返回到栈顶)
    递归是利用系统栈处理数据,可以不用系统栈处理,将递归变为迭代(循环)

    递归行为
    image.png
    这类递归行为的时间复杂度是直接确定的 a、b、d为常数
    代表:
    子问题(N/b)的规模是一致的 调用了a次,除了子问题的时间复杂度,剩下的为O(N^d)
    这一类的递归问题 可以用一个公式求出时间复杂度
    这类递归行为的时间复杂度为
    image.png

    image.png

    image.png
    例题的递归行为
    image.png

    1. // arr[L..R]范围上求最大值 L ... R N
    2. public static int process(int[] arr, int L, int R) {
    3. // arr[L..R]范围上只有一个数,直接返回,base case
    4. if (L == R) {
    5. return arr[L];
    6. }
    7. // L...R 不只一个数
    8. // mid = (L + R) / 2
    9. int mid = L + ((R - L) >> 1); // 中点 1
    10. int leftMax = process(arr, L, mid);
    11. int rightMax = process(arr, mid + 1, R);
    12. return Math.max(leftMax, rightMax);
    13. }

    image.png
    时间复杂度 O(1) 涉及到的知识点
    哈希函数 布隆过滤器 一致性哈希 哈希表的实现

    哈希表 按引用传递 按值传递(基础数据类型)
    HashMap key默认按值传递
    自定义的引用类型 key按引用传递(地址值)
    int 类型 值相等 就相等 Integer 默认比较地址值 (-128~+127 恢复按值传递)

    哈希表
    存基础数据类型 基础数据类型多大 就占多大空间
    存引用数据类型 不论引用数据类型多大 只存内存地址 一条地址8字节

    有序表
    时间复杂度 O(logN)
    image.png
    最小的key 最大的key Api
    image.png
    离给定key最近的key 结果可以等于
    image.png