ここに、配列内の一意の整数ペアの数を計算する関数があります。合計は偶数です。現在、ネストされたループを使用してこれをコーディングしましたが、ネストされたループは時間の複雑さをもたらすため、これは非効率的ですO(N²)
。
この例でA
は、 は配列P
をQ
表し、整数のペアを表します。そうしないと、一意でない整数のペアが生成されますQ
(ここで、P と Q は配列内の同じ値を指すことができます)。P
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)
、どこから始めればよいかわかりません! これには、ネストされたループではなく、1 つのループのみを使用する必要があることはわかっていますが、この点でどのように合計A[P]
するかはわかりません。A[Q]