递归
递归利用的实际是系统栈
(调用子函数时候会销毁上一个函数的执行过程,一旦有了返回值就会重建之前的执行过程)
(返回值返回到栈顶)
递归是利用系统栈处理数据,可以不用系统栈处理,将递归变为迭代(循环)
递归行为
这类递归行为的时间复杂度是直接确定的 a、b、d为常数
代表:
子问题(N/b)的规模是一致的 调用了a次,除了子问题的时间复杂度,剩下的为O(N^d)
这一类的递归问题 可以用一个公式求出时间复杂度
这类递归行为的时间复杂度为


例题的递归行为
// arr[L..R]范围上求最大值 L ... R Npublic static int process(int[] arr, int L, int R) {// arr[L..R]范围上只有一个数,直接返回,base caseif (L == R) {return arr[L];}// L...R 不只一个数// mid = (L + R) / 2int mid = L + ((R - L) >> 1); // 中点 1int leftMax = process(arr, L, mid);int rightMax = process(arr, mid + 1, R);return Math.max(leftMax, rightMax);}

时间复杂度 O(1) 涉及到的知识点
哈希函数 布隆过滤器 一致性哈希 哈希表的实现
哈希表 按引用传递 按值传递(基础数据类型)
HashMap
自定义的引用类型 key按引用传递(地址值)
int 类型 值相等 就相等 Integer 默认比较地址值 (-128~+127 恢复按值传递)
哈希表
存基础数据类型 基础数据类型多大 就占多大空间
存引用数据类型 不论引用数据类型多大 只存内存地址 一条地址8字节
有序表
时间复杂度 O(logN)
最小的key 最大的key Api
离给定key最近的key 结果可以等于
