我这里有一个函数,它可以计算数组中唯一整数对的数量,这些整数对的和是偶数。目前我使用嵌套循环编写了此代码,但这种方法效率低下,因为嵌套循环的时间复杂度为O(N²)。
在这个例子中,A代表数组,P和Q代表整数对。Q应该始终大于P,否则会导致非唯一整数对(其中P和Q可以指向数组中的同一个值)。
在这个例子中,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]
进行求和。