Algorithm Learning

尝试在 力扣上面刷点算法题,不管有没有用吧,就当学学数学了
时间复杂度(Time Complexity)

时间复杂度衡量的是:当输入规模 n 变大时,代码执行的基本操作次数大概会怎么增长。
用大 O(Big-O)表示的是“增长的级别”,忽略常数和低阶项。

常见例子(n 是数组长度):

  • O(1):操作次数基本不随 n 变(常数级)。
    例:读取 prices[0]。

  • O(n):操作次数和 n 成正比。
    例:遍历一遍数组,每个元素处理一次。 对列表进行切片时恢复至一份新列表,增加时间复杂度

  • O(n²):操作次数大约和 n² 成正比,n 稍大就会很慢。
    例:两层循环,外层 n 次、内层平均 n 次。

判断方法(粗略但好用):
看循环结构——一层“完整遍历 n”的循环通常是 O(n);两层嵌套通常是 O(n²)。
空间复杂度(Space Complexity)

空间复杂度衡量的是:除了输入数据本身以外,你额外用掉的内存随 n 的增长趋势。

常见例子:

  • O(1):只用固定数量的变量,不随 n 变。
    例:ans, streak, prev 这几个变量。

  • O(n):额外开了一个和输入同规模的结构(数组/列表/哈希表等)。
    例:b = [0]*n,或者 prices[i:](切片会新建一个列表,长度大约是 n-i)。


哈希表

在 Python 里,“哈希表”通常指 dict(字典)(以及底层同样依赖哈希表的 set(集合))。它的核心价值是:用“键(key)→值(value)”做快速查找,平均情况下插入/查询/删除都是 O(1) 级别。

dict的key必须是可哈希(hashable)的,常见数据类型int/float/str/tuple(确保内部也都是可哈希)/frozenset 都可以哈希。而list/dict/set 都不可哈希,因为这些类型可变。

hash() 会输出整数哈希值


Algorithm Learning
https://e-golem.github.io/2025/12/16/Algorithm/
作者
Pengwen Zhang
发布于
2025年12月16日
许可协议