空间复杂度** 与 **所需辅助空间**
当我们说一个算法的 空间复杂度是 O(1),通常特指“辅助空间”是 O(1),即:除了输入数据本身之外,算法只使用常数级别的额外空间。
✅ 正确认解:
O(1) 空间复杂度 ≈ O(1) 辅助空间
这表示:
- 不随输入规模增长而增长的空间需求
- 所使用的变量数量是固定的,比如只用几个整数、指针等
❗ 误区提醒:
- 有些人可能会误以为 O(1) 表示整个程序的空间开销,包括输入数据,这通常是不对的。
- 输入数据本身的空间(如数组、链表)在分析辅助空间复杂度时通常不计入空间复杂度中。
示例:原地反转数组
def reverse(arr):left, right = 0, len(arr) - 1while left < right:arr[left], arr[right] = arr[right], arr[left]left += 1right -= 1
- 输入空间:O(n)
- 辅助空间:O(1)(只用了常数个变量)
- 空间复杂度:通常也称为 O(1),默认指辅助空间
总结:
说法 | 通常含义 |
---|---|
“空间复杂度是 O(1)” | 常常指辅助空间是 O(1),不包含输入输出空间 |
是否想看一个辅助空间是 O(n) 的对比例子?