【发布时间】:2011-10-07 04:05:06
【问题描述】:
基于this 逻辑作为对 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) 解决方案。它的逻辑?
【问题讨论】:
-
您在尝试调试时学到了什么?
-
你的意图不清楚。我很清楚它不起作用,请用您自己的话描述您要编写的代码。
-
@Cody - 这个逻辑试图构建一个从 0 到 j 的唯一数字的子数组。
-
@Drakosha - 上面有什么不清楚的地方?尝试实现一个逻辑以从数组中删除重复元素(在这种情况下为整数),并仅返回同一数组中的唯一元素,同时尝试以 O(N) 时间复杂度完成它。
-
@goldenmean - 我明白,问题是你的想法是什么,即你打算怎么做。
标签: c arrays duplicate-removal