我这里有一个函数,它计算数组中唯一整数对的数量,总和是偶数。目前我已经使用嵌套循环对此进行了编码,但是这是低效的,因为嵌套循环会导致时间复杂度为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]
。