【问题标题】:Find and remove int duplicates in an Array查找和删除数组中的 int 重复项
【发布时间】:2012-09-21 12:34:29
【问题描述】:

首先,我知道已经有很多重复的答案,但我找不到我想要的,甚至在 Google 中搜索。这是面试时提出的问题。

所以,对于我的问题: 我有下一个 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. 尽可能使其最有用。

我试过用 Set 来做这件事,但现在我想要一些不同的东西。 还尝试用 -1 值替换重复值,但这仅在我假设我仅使用正值时才成立。

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

谢谢。

【问题讨论】:

  • 一组是您需要从该数据创建的 - 这就是 Set 类的用途。不要重新发明轮子。
  • 我们是否假设输入数组总是被排序的?
  • 你不能缩小一个数组,所以我不知道你打算怎么做。你能假设这些值已经排序了吗?
  • @Evan Mulawski 这就是面试官问的。相信我,我并没有试图重新发明轮子。
  • 其实像第二行代码这样的一句话,就是使用了一个新的数组。事实上,在许多语言中,修改这种数组的大小意味着使用一个新数组。因此,替代结构使用的具体限制是什么?

标签: java arrays duplicate-removal


【解决方案1】:

如果它们井井有条,那并不是很困难。

/**
 * 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 元素是有趣的。

【讨论】:

  • 我编辑是为了尝试实现要求 3(尽可能最有用)。
  • @dystroy 如果你写if(array[i]!=array[i+1]),我认为你可以在if语句中避免i==0
  • @loler 我不这么认为。两端不重复进行测试。
  • @dystroy 好的,我认为你必须避免在最后一个元素的情况下超载。
猜你喜欢
  • 2019-11-14
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 2015-04-23
  • 2014-11-02
  • 1970-01-01
相关资源
最近更新 更多