java - 如何删除出现两次以上的重复数字,但保留前两次出现

标签 java

所以我在Java中遇到了这个问题,想要删除出现两次以上的数字列表,但保留顺序,以及前两次出现的情况。

例如,如果列表为 2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2, 10

预期输出为 2, 3, 5, 4, 5, 2, 4, 3, 10

我尝试了几种方法,包括使用计数器 int 来跟踪发生的情况并将其过滤掉,但我不知道如何去做

class DeDup {
    // function to find the element occurring more than 3 times
    static void get2Occurrences(int arr[]) {
        int i;
        int count = 0;
        for (i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] == arr[j])
                    count++;
            }
            if (count < 3 && count > 0) {
                //return arr[i];
                System.out.print(arr[i] + ", ");
            } else {
                for (int k = 2; k > 0; k--) {
                    System.out.print(arr[i] + ", ");
                }
            }
        }
    }
    // driver code
    public static void main(String[]args) {
        int arr[] = new int[]{ 2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2, 10 }; 
        //expected output: 2, 3, 5, 4, 5, 2, 4, 3, 10
        //int n = arr.length;
        get2Occurrences(arr);
    }
}

预期输出为 2, 3, 5, 4, 5, 2, 4, 3, 10

但我有 2, 2, 3, 3, 5, 5, 4, 4, 5, 5, 2, 2, 4, 4, 3, 3, 5, 5, 2, 2, 4, 4, 4, 4, 2, 2, 10, 10,

最佳答案

我会使用一对 Set 来完成此操作:Set.add 返回一个 boolean 值,指示是否添加了该元素。因此:

boolean b = set1.add(num) || set2.add(num);

如果它被添加到任一集合中,则为 true - 并且仅当它已在 set1 中时才会尝试将其添加到 set2 中> - 和 false 否则,意味着它已经存在于两个集合中。

Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();

for (Integer a : arr) {
  if (set1.add(a) || set2.add(a)) {
    System.out.print(a + ", ");
  }
}

Ideone demo

关于java - 如何删除出现两次以上的重复数字,但保留前两次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406941/

相关文章:

java - 使用@ManyToMany 时如何将其他列添加到结果表中?

java - 为对象分配一个空值,然后尝试拆箱

java - 在 Java 中转换为泛型方法类型变量时出现编译器警告

java - 如何改变JFrame图标的大小

java - Jackson ObjectMapper 使用 Json 字符串键反序列化 Map

java - 将 selectListener 添加到 SWT 中的表

java - 使用 ArrayLists 忽略 indexOf() 的大小写

java - 格式化日历事件的日期时间对象,从谷歌日历API检索

java - 将数组的字符串输出到 java 中的 JTextArea

java - 无法使用 Jackson 将对象序列化为 Json