在未排序的数组中查找唯一元素

时间:2018-06-12 07:22:11

标签: java arrays

所以每个人都知道初学者有一个任务,你有一个排序数组,你需要找到唯一值的数量。例如,如果int [] sorted = {0, 0, 1, 1, 2, 2},则结果为 3个唯一值。我在想 - 如果我想对未排序的数组做同样的事情。我知道我可以对它进行排序,让我的生活更轻松 - 但仍然如此。

一个例子:int [] numbers = {2, 7, 3, 2, 3, 7, 7}。我的第一个想法 - 我需要2 for loops来查找 2 的所有实例,而不是 7 ,依此类推。这就是我怀疑的地方。

你可以看到 7 重复,我想知道如何确保我不会计算两次。更确切地说 - 我需要某种标志,以表明我之前已经计算过该元素,但我不确定如何将其写下来。

我怎么能接近这个?不一定在代码中,也许只是一点点提示如何做到这一点?

6 个答案:

答案 0 :(得分:6)

您可以使用Set来获取唯一元素

int [] numbers = {2, 7, 3, 2, 3, 7, 7}

Set<Integer> uniqueValue = new HashSet<>(Arrays.asList(numbers));

如果使用Java 8

,甚至更容易
Arrays.stream(number).distinct().toArray();

答案 1 :(得分:1)

使用hashmap。 关键是数量和价值是计数。 每次找到钥匙时都要更新计数。 如果密钥不可用,则将值为1的条目

答案 2 :(得分:0)

您不需要两个for循环,只需要一个包含您遇到过的数字的Set。在循环中添加到集合中,最后,它包含在数组中找到的唯一数字。

答案 3 :(得分:0)

您需要在一次迭代中将所有值添加到Set<E>,这样可以确保您的定义与值不同。使用LinkedHashSet<E>维护订单。否则,HashSet<E>也可以完成这项工作。

new LinkedHashSet<Integer>(Arrays.asList(array)).toArray();

或者,您可以使用Java 8新提供的功能:

Arrays.stream(array).distinct().toArray();

答案 4 :(得分:0)

您可以使用仅包含唯一值的Set,因此如果您将所有数组放入一个集合中,那么您将获得该集合的大小,已完成:)

答案 5 :(得分:0)

执行此操作的最佳方法是使用整数Set,如其他答案中所述。

如果你正在寻找没有它的解决方案,可以采用另一种方式:

如果你想使用两个for循环,为了避免重复,你可以&#34;消灭&#34;每次找到它时,所有的实例都是2,然后是7,依此类推。 例如,如果您符合以下情况,则使用0等数字覆盖所有2和7&#39; 1)忽略所有0(因此你不计算重写的重复项) 2)首先检查数组中是否有0,因此你不要忽略最初在数组中的0,并计为唯一数字。

希望这足以让你知道它是如何完成的!