首页 > 解决方案 > 查找不重复的数字

问题描述

我试图在数组中找到不重复的数字并将这些数字打印到新数组中。它有点工作,但由于某种原因两次打印一个数字,我不明白为什么。输出应该是 4 和 7,但它会打印 4 4 7。

import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Frequence {
    public static void main(String[] args) {
        int[] array = new int[]
                {
                        1, 2, 3, 2, 3, 3, 5, 4, 7, 1, 5
                };
        List<Integer> arr = new ArrayList<>();
        for (int value : array) {
            int count = 0;
            for (int i : array)
                if (value == i)
                    count++;
            if (count == 1) {
                arr.add(value);
                Integer[] arr2 = new Integer[arr.size()];
                arr2 = arr.toArray(arr2);
                for (Integer k : arr2)
                    System.out.println(k);
            }
        }
    }
}

标签: java

解决方案


由于您使用的是 a List<>,您可能会考虑使用Set<>. 由于设置值不包含重复项并且它们的值是经过哈希处理的,因此它们适合这种类型的操作。

以下适用于单个循环:

  • 首先将值添加到nonDups集合中。
  • 现在将它添加到found集合中。如果该值已在该集合中,则它位于较早的位置并返回 false。因此它必须是重复的,因此将其从nonDups.
  • 继续,直到处理完所有值。
Set<Integer> nonDups = new HashSet<>();
Set<Integer> found = new HashSet<>();
for (int k : array) {
    nonDups.add(k);
    if (!found.add(k)) { // returns false if already present
        nonDups.remove(k);
    }
}

System.out.println(nonDups);

印刷

[4,7]

推荐阅读