【发布时间】:2015-04-17 19:46:33
【问题描述】:
下面的代码检查数组中任何一对数字的总和是否为零。我试图通过考虑主要操作(如变量声明、赋值、比较、增量、数组访问等)的多少次来锻炼复杂性。通常复杂性是 O(N^2) 但是当我很困惑时必须考虑上面指定的操作。我应该如何处理?
int count = 0;
for(int i=0; i<N; i++)
for(int j=i+1; j<N; j++)
if(a[i] + a[j] == 0)
count++;
【问题讨论】:
-
您需要大 O 复杂度还是精确复杂度?
-
我的 O 复杂度很大,它是 O(N^2)。
-
如果您对两个数组进行排序 (O(N log N)),您将能够在 O(N) 时间内检查总和。