【发布时间】:2013-10-20 08:42:11
【问题描述】:
我这里有一个函数,它计算数组中唯一整数对的数量,谁的和是偶数。目前我已经使用嵌套循环对此进行了编码,但是这是低效的,因为嵌套循环会导致时间复杂度为 O(N²)。
在本例中,A 表示数组,P 和 Q 表示整数对。 Q 应始终大于 P,否则会导致非唯一整数对(其中 P 和 Q 可以指向数组中的相同值)。
public int GetEvenSumCount(int[] A)
{
// result storage
int result = 0;
// loop through each array element to get P
for (int P = 0; P < A.Length; P++)
{
// loop through each array element to get Q
for (int Q = P + 1; Q < A.Length; Q++)
{
// calculate whether A[P] + A[Q] is even.
if ((A[P] + A[Q]) % 2 == 0)
{
result++;
}
}
}
return result;
}
我现在需要重构它,使最坏情况的时间复杂度为O(N),但我不知道从哪里开始!我知道这将只使用一个循环,而不是嵌套循环,但我不知道在这方面你会如何将 A[P] 与 A[Q] 相加。
【问题讨论】:
-
显然你不能通过显式访问每一对来做到这一点。但你不必这样做。将报告解决方案。
-
这不会是 Twitter 的面试问题吧?
-
@templatetypedef,这是一个面试问题,但不适用于推特
标签: c# arrays algorithm big-o time-complexity