有没有一种方法可以在不创建另一个数组的情况下排除数组中的非重复数字?

时间:2019-04-05 18:13:26

标签: java arrays for-loop printing unique

我需要创建一个从两个数组中提取数字的输出:ab;并打印出唯一的,但只有一次。例如,如果有

int[] a = { 4,3,4,3,6,7,4,8,2,9 };
int[] b = { 2,3,6,8,1,5 };`

输出应为7, 4, 9 不是4, 4, 7, 4, 9

在任务中,它直接说:“不要创建任何辅助数组,集合或字符串。除了标准java.lang之外,不要使用包中的任何类。不能修改数组(特别是,不能对它们进行修改。排序)。打印值的顺序无关紧要。”

我有90%的东西,我只是不能得到一个不重复数字的数组

public class Main {

    public static void main(String[] args)
    {
        int[] a = new int[]{1,2,12,2,3,4,5,6,7,8,9,7,123};
        int[] b = new int[]{2,1,3,6,4,5,8,9,12};



        for (int i=0;i<a.length;i++)
        {
         int count =0;
         for (int j=0;j<b.length;j++)
         {
            if(b[j]==a[i])count++;
         }
          if (count==0) System.out.print(a[i] + " ");
        }
    }

}

我希望有7 123。 实际上,它会打印7 7 123。 我知道这一定是疯狂的简单事情,但我只是一个初学者,还不能将其包裹住。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在上面的代码中,您正在检查当前数字是否唯一并打印它,但不检查是否已使用该数字。 由于我们不能使用任何其他数据结构或修改现有内容,因此这是避免打印已用数字的一种方法。


    public class Main {

        public static void main(String[] args)
        {
            int[] a = new int[]{1,2,12,2,3,4,5,6,7,8,9,7,123};
            int[] b = new int[]{2,1,3,6,4,5,8,9,12};



            for (int i=0;i<a.length;i++)
            {
             int count =0;
             for (int j=0;j<b.length;j++)
             {
                if(b[j]==a[i])count++;
             }
              if (count==0 && !visitedPreviously(i-1, a[i], arr)) System.out.print(a[i] + " ");
            }
        }

    private boolean visitedPreviously(int index, int val, int[] arr){
         while(index >= 0){
              if(val == arr[index]){
                 return true; 
              }
           index--;
         }
      return false;

    }

    }

答案 1 :(得分:0)

这是查找独特元素的一种方法:

int[] a = new int[]{1, 2, 12, 2, 3, 4, 5, 6, 7, 8, 9, 7, 123};
int[] b = new int[]{2, 1, 3, 6, 4, 5, 8, 9, 12};

Stream<Integer> aStream = Arrays.stream(a).boxed();
Stream<Integer> bStream = Arrays.stream(b).boxed();

Set<Integer> intersection = aStream.collect(Collectors.toSet());
intersection.retainAll(bStream.collect(Collectors.toSet()));

Set<Integer> unique = Stream.concat(aStream, bStream).collect(Collectors.toSet());
unique.removeAll(intersection);

System.out.println(unique);

结果将是:

[7, 123]