# 时间复杂度和空间复杂度
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?
- 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。
- 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。
# 时间维度
- O(n)
for(var i = 0; i < n; i++) {
// .....
}
1
2
3
2
3
- O(logN)
while(i < n) {
i = i * 2;
// ...
}
1
2
3
4
2
3
4
- O(n²)
for(var i = 0; i < n; i++) {
// .....
for(var j = 0; j < n; j ++) {
// ....
}
}
1
2
3
4
5
6
2
3
4
5
6

# 空间维度
一个典型的空间换时间的例子:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
1
2
3
4
2
3
4
← 前端工程师为什么需要学习算法? 冒泡排序 →