时间复杂度和空间复杂度

1. 时间复杂度
  • 常数阶O(1)
  • 对数阶O(logN)
  • 线性阶O(n)
  • 线性对数阶O(nlogN)
  • 平方阶O(n²)
  • 立方阶O(n³)
  • K次方阶O(n^k)
  • 指数阶(2^n)

从上而下时间复杂度越来越大,执行效率越来越低。

① 常数阶O(1)

无论代码执行了多少行,只要没有循环等复杂结构,那么这段代码的时间复杂度就是O(1)

② 线性阶O(n)
for(int i = 0; i<= n; i++) {
    //todo
}

这段代码,for循环里的代码将执行n次,消耗的时间和变量n是成正比的。因此使用O(n)表示它的时间复杂度。

③ 对数阶O(logN)
for(int i = 1; i<n; i*=2) {
    
}

例如上述循环,它的终止条件是i<n,但是增长为i*2,那么意味着,循环< n次就会结束循环。

我们假设循环x次会结束,那么也就是2x次方就会等于n,也就是说:x = log2^n

所以它的时间复杂度为O(logN)

④ 线性对数阶O(NlogN)

在对数阶的基础上嵌套一个循环,终止条件为n

for(int i = 0; i<= n; i++) {
    for(int i = 1; i<n; i*=2) {
    
    }
}
⑤ 平方阶O(n^2)
for(int i = 0; i<= n; i++) {
    for(int i = 0; i<= n; i++) {
    
    }
}

存在两个终止条件为n的循环。

如果变成这样:

for(int i = 0; i<= n; i++) {
    for(int j = 0; j<= m; j++) {
    
    }
}

那么它的时间复杂度为O(n * m)

2. 空间复杂度
① O(1)`

如果算法执行时,所需空间不会因为某个变量的增大而增大,减小而减小。那么这段代码的空间复杂度为O(1)

O(n)
int[] array = new int[n];
int i = 5;
i = i *5;
n = i + n;

这段代码执行时,第一行会申请一个长度为n的一维数组,n越大,所需空间就越大n

所以它的空间复杂度为O(n)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值