什么是时间复杂度和空间复杂度?
什么是时间复杂度和空间复杂度?
-
时间复杂度:衡量代码运行时间随输入规模增大而增长的速度。简单来说,就是“代码跑多快”。
-
空间复杂度:衡量代码运行时额外占用的内存空间随输入规模增大而增长的速度。简单来说,就是“代码用多少内存”。
我们通常用 大 O 表示法(Big O Notation)来描述它们,如 O(1)、O(n)、O(n²) 等。
常用时间复杂度及其示例
1. O(1) - 常数时间
-
含义:运行时间不随输入规模变化,固定时间完成。
-
示例:访问数组的第一个元素。
public int getFirst(int[] array) {return array[0]; // 只执行一次操作 }
2. O(log n) - 对数时间
-
含义:运行时间随输入规模缓慢增长,每次操作将问题规模显著缩小。
-
示例:二分查找。
public int binarySearch(int[] array, int target) {int left = 0;int right = array.length - 1;while (left <= right) { // 每次循环规模减半int mid = left + (right - left) / 2;if (array[mid] == target) return mid;else if (array[mid] < target) left = mid + 1;else right = mid - 1;}return -1; }
3. O(n) - 线性时间
-
含义:运行时间与输入规模成正比。
-
示例:遍历数组并打印每个元素。
public void printArray(int[] array) {for (int i = 0; i < array.length; i++) { // 循环 n 次System.out.println(array[i]);} }
4. O(n log n) - 线性对数时间
-
含义<