我无法在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]);}
}
}
答案 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实现这个解决方案:
A = [0,..,n]
。使用false
值初始化它。for i = 0 to length(inputArray): A[inputArray[i]] := true
。false
,这些是您要返回的值。答案 3 :(得分:0)
列表与LT;整数&gt; list = Arrays.asList(yourArray);
然后你可以创建一个从1到n的数组,按顺序排列所有数字,如果你的列表包含或不重复,则遍历其元素检查每个数组,如果没有,则将其添加到另一个missingValues列表中。