模拟五六八

反思:

给一段代码,问你用什么数据结构:

  1. 给定一个结构体,答案就在结构体的名字和数据里
  2. 不给定义,那答案在函数调用过程中。常考的:递归,DFS,树或图的遍历(栈)。BFS(队列)。

时间复杂度:

  • 对数阶:如果每次问题规模缩小一半,通常是O(logn)。看到“范围减半”“每次乘2或除2”,更特殊的,进行二进制分解也属于,不一定直接显示出来这个增加/减少的过程。注意这是单次操作的

例如说,倍增算法里涉及到的快速幂

递归函数:如果一个递归函数每次只调用自己一次,并且参数每次减少1,O(n)。参数每次减少一半,O(logn)。如果一个递归函数每次只调用自己两次,并且参数每次减少1,O(2n)O(2^n)