在Java中查找嵌套for循环的数组中缺少的数字

在Java中查找嵌套for循环的数组中缺少的数字,java,arrays,Java,Arrays,我需要在O(n^2)时间内找到数组中缺少的数字。我可以重新排列数组,因此它是有序的,但是如果不运行另一个for循环,我很难找到丢失的数字,但是我不能这样做。 这是我的密码: 这里丢失的号码是3 public static void main(String[] args){ int ar []={0,1,6,2,5,7,4}; int n = ar.length; int temp = 0; int m = 0; for(int i = 0; i<n;

我需要在O(n^2)时间内找到数组中缺少的数字。我可以重新排列数组,因此它是有序的,但是如果不运行另一个for循环,我很难找到丢失的数字,但是我不能这样做。 这是我的密码: 这里丢失的号码是3

public static void main(String[] args){
    int ar []={0,1,6,2,5,7,4};
    int n = ar.length;
    int temp = 0;
    int m = 0;
    for(int i = 0; i<n;i++){
        for(int j = 1; j<n;j++){
            if(ar[j-1] > ar[j]){
                temp = ar[j-1];
                ar[j-1]=ar[j];
                ar[j]=temp;

                if(ar[j-1]!=j-1) m=j;
            }
            else ar[j]=ar[j];
            if(ar[j-1]!=j-1) m=j;
        }
    }
    System.out.println(m);
}
publicstaticvoidmain(字符串[]args){
int ar[]={0,1,6,2,5,7,4};
int n=ar长度;
内部温度=0;
int m=0;

对于(int i=0;i如果输入数组包含0到
ar.length
之间的所有数字,除了一个缺失的数字(如
{0,1,6,2,5,7,4}
示例),则可以在线性时间内找到缺失的数字

只需计算完整数组中所有数字的总和(包括缺失的数字)-该数组的
ar.length+1
元素从0到
ar.length
,因此其总和为
(ar.length-0)*(ar.length+1)/2
,并从中减去实际总和(可以在简单的线性时间循环中计算).不同的是缺少的号码


如果有多个缺失的数字(或者可能有重复的数字),并且您需要找到第一个缺失的数字,则在
O(n*log(n)
time中对数组进行排序,然后对排序后的数组进行单次(线性时间)传递仍然比
O(n^2)要好
解决方案。

如果您只能执行两个循环,并且必须为O(n^2)执行两个循环,那么我建议如下:

  • 循环通过所有值(外循环)
  • 对于每个值,循环遍历所有值(内循环),并找到高于当前值的最小值
  • 如果未找到更高的值,则跳过(当前值为最高值)
  • 如果找到的最小值不是当前值+1,则找到缺少的值
    • 这个怎么样

      int array[] = {0,1,6,2,5,7,4};
      int arrayTemp[] = array;
      ArrayList<Integer> missing = new ArrayList();
      Arrays.sort(arrayTemp);
      
      for (int i=1; i<arrayTemp.length; i++) {
          for (int j=arrayTemp[i-1]+1; j<arrayTemp[i]; j++) {
              missing.add(j);
          }
      }
      for (int i=arrayTemp[arrayTemp.length-1]+1; i<=arrayTemp[arrayTemp.length-1]; i++) {
          missing.add(i);
      }
      
      System.out.println(missing.toString());
      

      定义“缺少的数字”。数组中缺少的数字是什么?好的,数组中缺少的数字是什么:
      [0,1,5]
      ?缺少的数字的一般定义是什么?谢谢你的评论,但这是一个赋值,他们希望我们使用O(n^2)解决方案
      {0,1,6,2,5,7,4}    -> [3]
      {0,1,6,2,5,7,4,14} -> [3, 8, 9, 10, 11, 12, 13]