基于作为对不同(相似)问题的答案给出的这个逻辑,为了以 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) 解决方案。它的逻辑?