在不使用额外数组的情况下从int数组中删除重复值的最佳方法?

时间:2012-04-11 12:57:03

标签: c#

我需要在不使用额外数组的情况下从int数组中删除重复值,并且在从数组中删除重复值之后如何调整数组的长度?

例如: -

int [] arr = new int [] {1,2,1,3,3,5,6,1,3,2,8} //数组长度为11

删除重复值后输出

应为{1,2,3,5,6,8} //数组长度为6

有可能吗?

**我不允许使用预定义的方法,只需要使用适当的逻辑执行。

2 个答案:

答案 0 :(得分:3)

从根本上说,你不能:数组在.NET中是固定大小的。你无法调整它们的大小。

你可能会保留一个单独的变量来指示数组的“used”部分,最后得到一个数组(比如){1,2,3,5,6,8,0,0,0,0 ,0}和“使用长度”为6.除了避免使用额外的数组之外,还不清楚在性能方面你感兴趣的是什么方面。例如,你可以对数组进行排序,然后一起走,每当你遇到连续的相等元素时,将其余部分拖放一个值。

答案 1 :(得分:0)

正如Jon所说,你无法调整数组大小。最好的方法是使用Hashset。

如果您不允许使用Hashset,请对它们进行排序。但是在这里你应该创建一个新数组来保存结果。