时间复杂度
时间复杂度:算法的执行效率。算法的执行时间与算法的输入值之间的关系。
计算时间复杂度,就看算法里面有没有循环,有循环的话,这些常量单语句就不看了。没有循环,基本上就是o(1)了,
o(1):
算法与我们的输入num无关,都是常量时间。
不管我们的num值有多大,当前的算法执行的时间都不变。此时语句中无循环语句如for while
o(N):
执行一次total=0为a时间
执行for循环语句 一次为b时间,有num个(n个),则为nb使劲啊时间
执行return语句为c时间
所以总体时间为:a+nb+c
当n即num数很大时,为1000,10000.。。b c的这些单个时间就可以忽略不计。
因此总体时间为nb,计算时间复杂度时忽略前面的系数b,则为o(N)
o(logN):
单个语句为常量时间可忽略不计,while语句要循环logN次,这个例子中循环语句要循环
循环时间为
a为系数,是个常量,忽略
o(M+N):
里面有两个循环,这两个循环并列 加法
o(NlogN):
循环套循环 是乘法
o(N^2):
两个循环嵌套,乘法。两个N相乘。
对比
空间复杂度
算法的存储空间与输入值之间的关系。
(占空间的都是我们声明出来的变量)
一个int变量为1个字节
看空间复杂度的时候,找的就是变量。
变量等于常量的情况下,永远都是o(1),是固定不变的。
一旦涉及array,list。。。多个数的集合的时候,空间就会随着nums的个数而改变。如o(N)
看看有没有递归,因为递归是一层一层一层往下的。是o(N),因为他会把信息存在递归站里面。