leetcode 2和c算法是我在学习算法和数据结构时保留的一些练习题和笔记。散记渗透问题:顶行到底行,相反,有一个虚拟的顶部和虚拟的底部以简化问题。数学表达式:$$ \sum_{i=1}^{n} i = 1+2+...+n = n(n+1)/2 $$ $$ \sum_{i=1}^{n} i-1 = 1+2+...+(n-1) = n(n-1)/2 $$

复杂性分析

  • ϴ:紧的上下界

  • O:上限

  • π:下限

  • o:从未达到上限的表现

乘法与位移:一些编译器将乘法优化为位移。对我们来说,优化有时会损害可读性,请明智选择。真正的随机笔记:

  • 使用堆栈而非动态数组有时更有效

  • 对小数据集(<=3)的基本情况可以直接使用蛮力解决方案

  • 排序优化为O(n)

  • 返回最小值:A,B,C

  • 对于无法应用主算法的地方,找到更合适的O(?)

双重for循环:如果第二个for循环有更多条件,double for循环可能为O(n)而不是O(n^2)

异或运算:1异或2异或1 = 2

在Java中插入/访问地图,或在C中使用有序映射(内部使用红黑树)为O(log n),无序映射(hashmap)为O(1)。