我需要从数组中删除重复的条目,但不能使用任何新的数据结构,同一个数组应该只返回不同的元素。例如,如果我的数组是1,3,3,3,5,55,67,1
,则结果应为1,3,5,55,67
。
我相信我已经解决了这个问题,但是我需要你的意见,不管它是一个好的算法还是我需要改变一些东西。
public void DeleteDuplicate(int[] array)
{
int l = 0;
int newPosition = array.Length -1;
for (int i = 0; i < array.Length; i++)
{
for (int j = i + 1; j < array.Length-l; j++)
{
if (array[i] == array[j])
{
int temp = array[j];
array[j] = array[newPosition];
array[newPosition] = temp;
newPosition--;
l++;
}
}
}
Array.Resize(ref array, array.Length - l);
}
答案 0 :(得分:3)
您的代码有问题。尝试对{1,1,1}运行它 - 我认为它将返回{1,1}。
答案 1 :(得分:3)
一般来说,问题是你是否必须保持元素的相对顺序。例如,是否可以为输入{2,1,2,1}返回{1,2}。
如果允许,那么最快的解决方案将是:
总复杂度为O(N * logN),优于您提出的N ^ 2.
如果您必须保留初始订购,那么我还没准备好提出解决方案。
答案 2 :(得分:1)
上次我检查C#允许你对2个数组进行排序,使用一个数组进行比较并对两者进行交换。
以下是您可以做的事情:
indices
。 array
作为关键字排序indices
和array
。 array
作为关键字排序indices
和indices
。 这会删除重复项并保留排序。