講師がクラスでこの質問をしました:[質問]
n個の整数のシーケンスが配列A[1..n]に格納されます。Aの整数aは、Aにn / 2回以上出現する場合、多数派と呼ばれます。
O(n)アルゴリズムは、次の観察に基づいて過半数を見つけるために考案できます。元のシーケンスの2つの異なる要素が削除された場合、元のシーケンスの過半数は新しいシーケンスの過半数のままです。この観察結果を使用するか、そうでない場合は、プログラミングコードを記述して、O(n)時間で大部分が存在する場合はそれを見つけます。
この解決策が受け入れられた[解決策]
int findCandidate(int[] a)
{
int maj_index = 0;
int count = 1;
for (int i=1;i<a.length;i++)
{
if (a[maj_index] == a[i])
count++;
else
count--;
if (count == 0)
{
maj_index =i;
count++;
}
}
return a[maj_index];
}
int findMajority(int[] a)
{
int c = findCandidate(a);
int count = 0;
for (int i=0;i<a.length;i++)
if (a[i] == c) count++;
if (count > n/2) return c;
return -1;//just a marker - no majority found
}
提供されているソリューションが動的ソリューションであることがわかりません。そして、その言葉遣いに基づいて、彼がそのコードをどのように引き出したかはわかりません。