我目前设计了一个函数,将整数列表分成2个子列表(大小为n / 2),以便最大化两个列表之间的差值。
伪代码如下所示:
for ( i = 0 ; i < list_size ; i++ )
if (list[i] > max) list_max = list[i]
int array[list_max];
for ( i =0; i < list_size ; i++ )
array[list[i]]++
for ( i = 0; i < list_max ; i++ )
//compute sums of two lists from array
我认为前两个for循环是O(n),但是我不知道如何考虑第三个循环的时间复杂度......
答案 0 :(得分:1)
所以这里有一些事情要考虑,解决这个问题的一个简单方法就是分析每个循环。
O(n)的
第一个循环显然运行n次,其中n表示list_size
O(n)的
第二个循环与第一个循环
O(M)
此循环运行m次,其中m表示list_max
所以我们将这些全部加在一起得到:
O(n + n + m)=&gt; O(2n + m)=&gt; O(n + m)
答案 1 :(得分:0)
当你的函数中有两个for循环时,可以说它的复杂度是O(n + k)(考虑到n = list_size和k = list_max)。