在未排序的数组1到100中找到2个缺失的数字。(Java)

时间:2016-08-08 19:14:46

标签: java arrays

我正在努力解决以下提示背后的逻辑:未排序的整数数组包含从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);
          }                          
    }

我现在的问题是我无法通过循环打印实际缺失的数字。它打印的数字高于缺失的数字。我尝试了几种不同的方法,它总是打印上面或下面的数字,而不是实际丢失的数字。

3 个答案:

答案 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);
    }
}