【问题标题】:Find non-duplicate items between two arrays with Java [closed]使用Java查找两个数组之间的非重复项[关闭]
【发布时间】:2013-10-16 20:15:51
【问题描述】:

我有以下任务: 在 -20000000 和 20000000 之间有 2 个整数的一维数组。第一个数组中包含的一些数字也包含在第二个数组中。我必须找到包含在第一个数组中但不包含在第二个数组中的所有数字。我必须使用 Java 作为一种语言

这是数组

[1, 652 ,5, 15, 385, 4 , 55, 666, 13]

[2, 4658, 9, 55, -588, 10, 1083, 17]

任何想法如何找到它?

编辑:

这是最终代码:

import java.util.ArrayList;
import java.util.List;
public class Values {
public static void main (String[] argv) {

int[] Array1 = new int[] {1,652,5,15,385,4,55,666,13};
int[] Array2 = new int[] {2, 4658, 9, 55, -588, 10, 1083, 17};
int calculateResult = 0;
boolean contains = false;
int mod = 123456789; 
int modSum = 0;

List<Integer> results = new ArrayList<Integer>();
    for(int i=0; i<Array1.length; i++) {
        for(int j=0; j<Array2.length; j++) {
            if(Array1[i]==Array2[j]) {
                contains = true;
                break;
            }
        }
        if(!contains) {
            results.add(Array1[i]);
        }
        else {
            contains = false;
        }
    }
    // calculate the result
    for (int i : results) {
        calculateResult  += i;
    }
    // Print Results
    System.out.println(results);
    System.out.println(calculateResult);
}}

现在我正在尝试从 .csv 文件加载数组。有什么想法吗?

【问题讨论】:

  • 到目前为止你有什么?你尝试过什么吗?请给我们看一些代码

标签: java arrays hashmap find


【解决方案1】:

这是一个可能的解决方案:

    int[] Array1 = new int[] {1,652,5,15,385,4,55,666,13};
    int[] Array2 = new int[] {2,4658,9,55,-588,10,1083,17};
    boolean contains = false;
    List<Integer> results = new ArrayList<Integer>();


    for(int i=0; i<Array1.length; i++) {
        for(int j=0; j<Array2.length; j++) {
            if(Array1[i]==Array2[j]) {
                contains = true;
                break;
            }
        }
        if(!contains) {
            results.add(Array1[i]);
        }
        else{
            contains = false;
        }
    }

    System.out.println(results);

输出:

[1, 652, 5, 15, 385, 4, 666, 13]

我希望这就是你要找的。​​p>

【讨论】:

  • 您应该在contains = true; 之后中断循环,这样可以节省将第二个循环的其他元素与父循环的元素进行比较的时间。
  • 是的,现在我正在尝试获取结果的总和
【解决方案2】:

【讨论】:

    【解决方案3】:

    取第一个数组,对于其中的每个元素,如果这不是第二个数组的元素,则将其视为好,否则将其丢弃。

    现在你只需学习如何用java语言编写它!

    【讨论】:

      【解决方案4】:

      我不明白为什么这个问题有反对票,其实很有趣。

      看看下面哪个对你有用,你只需要使用列表而不是数组

              List<Integer> l1 = new ArrayList<Integer>();
              List<Integer> l2 = new ArrayList<Integer>();
      
              l1.add(1);
              l1.add(3);
              l1.add(5);
              l1.add(7);
              l1.add(8);
      
              l2.add(2);
              l2.add(3);
              l2.add(4);
              l2.add(7);
      
              l2.retainAll(l1);  //Now l2 have only common elements of both list this is an optional this will work well when there are thousands of element otherwise only do remove all
              l1.removeAll(l2);  //Here magic happens this will remove common element from l1 so l1 will have only elements what are not in l2
      
              for(Integer v: l1){
                  System.out.println(v);
              }
      

      输出:

      1
      5
      8
      

      【讨论】:

      • 这个问题可能有反对票,因为 OP 没有表现出对他要完成的工作的任何理解。从技术上讲,他的问题的正确答案是“是”......;)
      【解决方案5】:

      你可以这样实现。

      Integer[] array1  = {1, 652 ,5, 15, 385, 4 , 55, 666, 13};
      Integer[] array2 ={2, 4658, 9, 55, -588, 10, 1083, 17};
      List<Integer> list=  new ArrayList<Integer>(Arrays.asList(array1));
      TreeSet<Integer> set = new TreeSet<Integer>(list);
      set.removeAll(Arrays.asList(array2));
      
      System.out.println(set);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 2015-07-20
        • 2012-12-22
        相关资源
        最近更新 更多