# 时间复杂度和空间复杂度

算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?

  • 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。
  • 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。

# 时间维度

  • O(n)
for(var i = 0; i < n; i++) {
    // .....
}
1
2
3
  • O(logN)
while(i < n) {
    i = i * 2;
  	// ...
}
1
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
xcooo

# 空间维度

一个典型的空间换时间的例子:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
1
2
3
4
上次更新: 2021/2/24 上午10:55:31