是否有一种从数组中删除重复指针的通用方法,例如输入如下:
返回:
不需要知道指针指向的东西的类型吗?
答案 0 :(得分:4)
我会做以下事情:
如果对数组进行排序,则跟踪指针是否重复是非常容易的:您只需保存最后复制的数据,不要复制下一个,直到它不同为止。
另一种简单的暴力方法(如果你需要保留原始数组中指针的顺序)将是在数组中向前搜索,用NULL
替换重复项。这具有O(n ^ 2)复杂度,但您可能不关心适度的数组大小。例如:
k=0
for(i=0; i<n; i++) {
if( myarray[i] == NULL ) {
continue;
}
current = myarray[i];
unique[k] = current;
k++;
for(j=i+1; j<n; j++) {
if( current == myarray[j] ) {
myarray[j] = NULL;
}
}
}
答案 1 :(得分:1)
使用哈希表有帮助,这是一个解决方案预期案例O(N)
[不是最坏的情况]。
H = Empty Hash Table
foreach ptr in Array:
if ptr NOT present in H:
insert ptr to H
// H now have every ptr only once
wi = 1 // write index
for ri = 1..n: // read index
ptr = Array[ ri ]
if ptr in H:
Array[ wi ] = ptr
remove ptr from H
wi++