我正在努力解决以下提示背后的逻辑:未排序的整数数组包含从1到100的98个不同的数字。因此,在1到100的数字中,缺少两个不同的数字。找到他们。
我理解找到一个缺失号码背后的概念,这是给我提出问题的第二个概念。有什么建议?
是的,我已经看到了这个entry,但我发现给出的答案要么太复杂,要么太详细,要么偏离主题。我是一个java初学者 - 只是试图绕过这个。
编辑:这是我在跟随数字1-100启动数组然后对它们进行排序的地方:
for (int i = 0; i < arr.length; i++) {
int j = i + 1;
if (arr[j] - arr[i] > 1){
int missing = arr[i + 1];
System.out.println(missing);
}
}
我现在的问题是我无法通过循环打印实际缺失的数字。它打印的数字高于缺失的数字。我尝试了几种不同的方法,它总是打印上面或下面的数字,而不是实际丢失的数字。
答案 0 :(得分:3)
对数组进行排序,然后执行循环,如果循环中的下一个元素不是上一个+ 1 ,那么它将丢失一个。将先前的值保存为单独的变量,以便更多地区分数字。
答案 1 :(得分:2)
创建一个包含100个条目的“列表”;每个值在启动时设置为false
。
迭代你的数组,只需将每个条目作为布尔列表中的索引 - 并将值切换到true
。
最后,布尔列表包含两个值为false
的值;他们的指数构成了两个缺失的数字。
答案 2 :(得分:0)
假设你的unsorted int数组被称为arr
。现在创建一个包含100个元素的布尔数组,所有元素都初始化为false(默认值)。当您遍历arr
时,将布尔数组中的相应元素标记为true
。例如,如果arr
中的第一个元素是20,那么将visited[19]
设为true。执行此操作后,遍历布尔数组以查看哪两个索引为false,这将告诉您哪两个数字丢失。这是它应该是什么样子,
boolean visited = new boolean[100];
for(int i = 0; i < arr.length; i++){
visited[arr[i] - 1] = true;
}
for(int i = 0; i < visited.length; i++){
if(!visited[i]){
System.out.println(i + 1);
}
}