別の(類似した)質問に対するSOの回答として与えられたこのロジックに基づいて、 O(N)時間計算量の配列で繰り返される数値を削除するために、以下に示すように、そのロジックをCに実装しました。しかし、私のコードの結果は一意の番号を返しません。デバッグを試みましたが、これを修正するためのロジックを取得できませんでした。
int remove_repeat(int *a, int n)
{
int i, k;
k = 0;
for (i = 1; i < n; i++)
{
if (a[k] != a[i])
{
a[k+1] = a[i];
k++;
}
}
return (k+1);
}
main()
{
int a[] = {1, 4, 1, 2, 3, 3, 3, 1, 5};
int n;
int i;
n = remove_repeat(a, 9);
for (i = 0; i < n; i++)
printf("a[%d] = %d\n", i, a[i]);
}
1]重複を削除するための上記のコードの誤り。
2]この問題に対する他のO(N)またはO(NlogN)ソリューション。その論理?