在Array中查找并删除int duplicates

时间:2012-09-21 12:34:30

标签: java arrays duplicate-removal

首先,我知道已经有很多重复的答案,但我找不到我想要的东西,甚至在谷歌搜索过。这是一个在采访中提出的问题。

所以,对于我的问题: 我有下一个int数组:

int[] array = {1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9, 9};

编辑:您可以假设数组已排序。

我想只得到不同的值,没有重复,意思是:

array = {1, 2, 3, 4, 5, 6, 7, 8, 9, ......};

编辑:假设您不需要缩小数组,而是按照排序顺序返回值,最后返回其余值。

有几条指示:

  1. 不要使用任何其他或新数组,这意味着使用相同的数组返回结果。
  2. 请勿使用Set或ArrayList之类的任何集合。
  3. 尽可能让它变得最有用。
  4. 我试图用Set做到这一点,但现在我想要一些与众不同的东西。 还试图用-1值替换重复值,但只有当我假设我只使用正值时才会这样。

    如果您发现相同的问题,请告诉我,我将删除此问题。

    感谢。

1 个答案:

答案 0 :(得分:9)

如果它们有序,那就不是非常困难了。

/**
 * removes duplicates in the provided sorted array
 * @return the number of different elements (they're at the beginning)
 */
public static int shrink(int[] array) {
    int w = 0;
    for (int i=0; i<array.length; i++) {
      if (i==0 || array[i]!=array[i-1]) {
          array[w++]=array[i];
      }
    }
    return w;
}

之后,只有第一个w元素才有意思。