如何在Java中找到整数数组中缺少的数字?

时间:2016-02-21 21:00:26

标签: java arrays

我无法在Java中找到解决方案。我需要编写将采用整数n的代码,以及一个数字最多为n(有些可能缺失)的整数数组,并且该方法将打印出缺少哪些数字

ex:{2; 3; 5; 1; 2; 3}应打印出4,6

编辑:这是我从评论建议中得到的,但它似乎没有效果。我做错了什么?

      public static void findMissingNum(int n, int[]a) { 
         boolean A[] = new boolean[n];
       for(int i = 0; i < a.length; i++) { 
              A[a[i]] = true;
         }

      for(int j = 0; j < A.length; j++) { 

         if (A[j] = false) {System.out.print(A[j]);}


       }


    }

4 个答案:

答案 0 :(得分:2)

我之前看到这被用作家庭作业或测验问题,问题是请求你使用hash table。创建一个大小为n的空布尔数组,并为列表集array[num]中的每个数字创建True。循环遍历新数组,并记录False的所有实例,提前知道应该有多少实例。

答案 1 :(得分:1)

以下应该有效:

public void find() { 
        Scanner s = new Scanner(System.in);
        int[] nums = {2, 3, 5, 1, 2, 3};
        int n = s.nextInt();
        boolean[] included = new boolean[n+1]; 

        for(int i = 0; i < nums.length; i++) included[nums[i]] = true;
        for(int z = 0; z < included.length; z++) {
            if(included[z] == false) System.out.print(z+ ",");

        }
    }

这将打印出所有缺失的数字,包括n(如果缺少)。如果未包含n,请执行new boolean[n]

它的工作方式是首先使用Scanner读取你的int n。它有两个数组,一个包含数字的int数组,以及一个用作一组标志的布尔数组。布尔数组初始化为n的大小。然后它循环通过nums数组并查看数组中包含的数字。如果包含该数字,则其在布尔arary中的元素将标记为true。最后,它循环遍历flags / boolean数组,如果该标志处的元素为true,则不执行任何操作,否则如果其为false(意味着包含#wasn&t),则打印它。

答案 2 :(得分:0)

尝试用Java实现这个解决方案:

  1. 创建布尔值的第二个数组A = [0,..,n]。使用false值初始化它。
  2. 遍历输入数组:for i = 0 to length(inputArray): A[inputArray[i]] := true
  3. 检查数组中哪些索引的值为false,这些是您要返回的值。

答案 3 :(得分:0)

列表与LT;整数&gt; list = Arrays.asList(yourArray);

然后你可以创建一个从1到n的数组,按顺序排列所有数字,如果你的列表包含或不重复,则遍历其元素检查每个数组,如果没有,则将其添加到另一个missingValues列表中。