本次素材来源于cctalk 比特就业课
第一题
计算Func1的时间复杂度
第一个for循环执行每执行一次,第二个for循环就要执行n次,所以执行n(n-1)次
第三的for循环执行2n次
while 循环执行10次,所以总共是n(n-1)+2n+10次,时间复杂度为0()
第二题
这里分两种情况:
(1)如果题目说明了m和n的大小关系:
m>n:时间复杂度为O(m)
m=n:时间复杂度为O(m)或O(n)
m<n:时间复杂度为O(n)
(2)题目没说明:O(m+n)
第三题
第四题
这题查找字符串,假设字符串长度为N。
最好情况:第一个字符为目标字符O(1),最坏情况O(N).
时间复杂度是求最坏情况的时间,所以这题时间复杂度为O(n)
第五题:冒泡排序求时间复杂度
冒泡排序的原理是依次向后比较,如大于后一位则交换顺序。
所以第一趟冒泡要执行n次,第二趟冒泡执行n-1次,........所以是一个等差数列(n+1)n/2
所以时间复杂度为O()
第五题:折半查找/二分查找
O()
第六题:递归求时间复杂度
二.空间复杂度的计算
空间复杂度:不是具体比特位大小,而是模糊的空间个数,也是用大O渐进表示
第一题:冒泡排序的空间复杂度
这里一共定义了5个变量以及参数,形参*a(这里表示的是数组a的第一个元素的首地址)、n、end、i、exchange,所以空间为5是个常数。
所以空间复杂度为O(1)
注意:时间是累计的,空间是不变的,虽然每次循环都建立一个变量,但是空间是不变的
第二题
这里有6+n个变量/参数 五个:n、fibArray、fibArray【0】,fibArray【1】
还有一个是malloc函数创建了一个含有n+1个空间的数组
malloc 是开辟一个数组,这里是n+1个容量的数组。所以空间复杂度是 O(n)
第三题 递归以及栈帧问题的空间复杂度
递归的栈帧问题:每当递归一次都会创建一个空间,这里创建了N层。但返回时,每返回一次就销毁一个空间,所以空间过程为O(1)->O(N)->O(1)。但空间复杂度与时间复杂度一样取最高值。所以时间复杂度为O(n)