时间复杂度
从小到大依次排列
O(1) < O(1og n) < O(n) < O(nlog n) < O(n2) < O(n3) < ...
时间复杂度为 O(1)的例子
let a = 1;
result = 3 + 4;
result = n * 2
result = 10000 * 10000
array.push(12)
array.pop()
map.set(1,2)
在计算复杂度时 一般会将复杂度为1的进行忽略
时间复杂度为 O(n)的例子
for 循环/while 循环(不使用二分搜索)
let a = 0;
for (let i = 0; i < n; i++) {
a+=i
}
多个O(n)时间复杂度也为O(n)
let a = 0;
for (let i = 0; i < n; i++) {
a+=i
}
let b = 0;
for (let i = 0; i < n; i++) {
b+=i
}
下面这种情况也是O(n), 因为j 不是从0或者已知常量开始的
while (i < n) {
i++; j = i;
while(j < n) {
i++
}
}
复杂度计算(取值标准) 取最大的那个
1、n3 + n2 + n 时间复杂度是 n3 2、2n2 + 3n + 6 时间复杂度是 n2
空间复杂度
空间复杂度为O(1)的例子
let a = 1
const b = 2
空间复杂度为O(n)的例子
1、定义一个长度为n的数组 2、定义一个长度为n的set map 3、用for循环生成一个链表
空间复杂度为O(n2)的例子
1、二维数组 2、一维数组每个元素放一个长度为n的set 或者 map