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

Java 在未排序的数组1到100中查找2个缺失的数字。(爪哇),java,arrays,Java,Arrays,我正在努力解决以下提示背后的逻辑:未排序的整数数组包含98个从1到100的不同数字。因此,在从1到100的数字中,缺少两个不同的数字。找到他们 我理解寻找一个丢失的数字背后的概念,这是给我带来问题的第二个数字。有什么建议吗 是的,我看到了,但我发现给出的答案要么太复杂、太详细,要么离题。我是一个java初学者,只是想了解一下这一点 编辑:这就是我在以下方面的工作:启动一个数字为1-100的数组,然后对它们进行排序: for (int i = 0; i < arr.length; i++)

我正在努力解决以下提示背后的逻辑:未排序的整数数组包含98个从1到100的不同数字。因此,在从1到100的数字中,缺少两个不同的数字。找到他们

我理解寻找一个丢失的数字背后的概念,这是给我带来问题的第二个数字。有什么建议吗

是的,我看到了,但我发现给出的答案要么太复杂、太详细,要么离题。我是一个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);
          }                          
    }
for(int i=0;i1){
int缺失=arr[i+1];
系统输出打印项次(缺失);
}                          
}

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

创建一个包含100个条目的“列表”;启动时将每个值设置为
false

迭代数组,只需将每个条目作为布尔值列表中的索引,并将其中的值切换为
true


最后,布尔列表包含两个
false
值;他们的索引构成了两个缺失的数字。

创建一个包含100个条目的“列表”;启动时将每个值设置为
false

迭代数组,只需将每个条目作为布尔值列表中的索引,并将其中的值切换为
true


最后,布尔列表包含两个
false
值;它们的索引构成了两个缺失的数字。

对数组进行排序,然后执行循环,如果循环中的下一个元素不是previous+1,则缺少一个。将上一个值保存到单独的变量中,以便一个接一个地获得更多不同的数字。

对数组进行排序,然后执行循环,如果循环中的下一个元素不是previous+1,则缺少一个。将上一个值保存到单独的变量中,以便一个接一个地获得更多的distincts数字。

假设未排序的int数组被称为
arr
。现在创建一个包含100个元素的布尔数组,所有元素都初始化为false(默认值)。在遍历
arr
时,将布尔数组中的相应元素标记为
true
。例如,如果
arr
中的第一个元素是20,则将
visitored[19]
设为true。完成此操作后,遍历布尔数组以查看哪两个索引为假,这将告诉您缺少哪两个数字。这是它的样子

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);
    }
}
boolean=new boolean[100];
对于(int i=0;i
假设未排序的int数组被称为
arr
。现在创建一个包含100个元素的布尔数组,所有元素都初始化为false(默认值)。在遍历
arr
时,将布尔数组中的相应元素标记为
true
。例如,如果
arr
中的第一个元素是20,则将
visitored[19]
设为true。完成此操作后,遍历布尔数组以查看哪两个索引为假,这将告诉您缺少哪两个数字。这是它的样子

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);
    }
}
boolean=new boolean[100];
对于(int i=0;i
您能否发布您迄今为止尝试过的内容,以便我们能够找到混淆的根源?同时使用求和(Euler)和乘积(阶乘),您将需要
BigInteger
。这将给你O(N)时间和O(1)存储空间。你在发布之前至少用谷歌搜索过吗?如果我没有,我就不会发布了。@pm77-precise-product,即N!,至少是O(n^1.5)你能发布你到目前为止所做的尝试,以便我们能够找到混淆的根源吗?同时使用求和(Euler)和乘积(阶乘),你需要
BigInteger
。这将给你O(N)时间和O(1)存储空间。你在发布之前至少用谷歌搜索过吗?如果我没有,我就不会发布了。@pm77-precise-product,即N!,你是否注意到至少有O(n^1.5)未排序?你是否注意到他的前两个词:“排序数组”@PM77-1,是-因此是“排序数组”。未排序并不意味着-无法排序。@MaciejSikora我问,因为如果你通过简单的检查对数组进行简单的循环,那么如果你有,例如,3和4缺失,你会得到1和2,然后是5。5不是2+1,因此它会注意到缺少3。但是,如果您只是在下一个元素(即5)继续循环,它将永远不会找到另一个丢失的数字。如果1缺失,你必须在循环之前检查它,否则它就会缺失。你注意到未排序吗?你注意到他的前两个词了吗?@PM77-1,是-因此是“排序数组”。未排序并不意味着-无法排序。@MaciejSikora我问,因为如果你通过简单的检查对数组进行简单的循环,然后如果你有,例如,3和4缺失,你得到1和2,然后是5。5不是2+1,因此它会注意到缺少3。但是,如果您只是在下一个元素(即5)继续循环,它将永远不会找到另一个丢失的数字。如果1缺失,你必须在循环之前检查它,否则它就会缺失。使用
数组比使用
列表更好,但你仍然有我的投票权。为什么?我是说;为什么您更喜欢数组?因为初始分配具有固定大小?谢谢你的投票;我真的很害怕