如何在 Java 中从数字 1 到 n 的给定数组中找到缺失的数字?

java 8object oriented programmingprogramming更新于 2025/9/20 10:20:17

如果包含数字值序列的整数数组中缺少单个数字,则可以根据数字的总和或数字的异或来找到它。

基于数字的总和 −

  • n 个连续数字的总和将为 [n*(n+1)]/2。使用此方法获取 n 个数字的总和。
  • 添加数组中的所有元素。
  • 从 n 个数字的总和中减去数组中数字的总和。

示例

import java.util.Scanner;
public class MissingNumber {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the n value: ");
      int n = sc.nextInt();
      int inpuArray[] = new int[n];
      System.out.println("Enter (n-1) numbers: ");
      for(int i=0; i<=n-2; i++) {
         inpuArray[i] = sc.nextInt();
      }
      //查找缺失的数字
      int sumOfAll = (n*(n+1))/2;
      int sumOfArray = 0;
      for(int i=0; i<=n-2; i++) {
         sumOfArray = sumOfArray+inpuArray[i];
      }
      int missingNumber = sumOfAll-sumOfArray;
      System.out.println("Missing number is: "+missingNumber);
   }
}

输出

Enter the n value:
5
Enter (n-1) numbers:
1
2
4
5
Missing number is: 3

使用 XOR 运算 − 查找缺失数字的另一种方法是使用 XOR。

  • 查找所有数字的 XOR。
  • 查找数组中所有数字的 XOR。
  • 然后查找两个结果的 XOR。

示例

import java.util.Scanner;
public class MissingNumber {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the n value: ");
      int n = sc.nextInt();
      int inpuArray[] = new int[n];
      System.out.println("Enter (n-1) numbers: ");
      for(int i=0; i<=n-2; i++) {
         inpuArray[i] = sc.nextInt();
      }
      //查找缺失的数字
      int xorArray = inpuArray[0];
      //对数组元素进行异或
      for(int i=1; i<=n-1; i++) {
         xorArray = xorArray ^ i;
      }
      int xorAll = inpuArray[0];
      //对数组元素进行异或
      for(int i=1; i<=n+1; i++) {
         xorAll = xorAll ^ i;
      }
      int missingNumber = xorArray ^ xorAll;
      System.out.println("Missing number is: "+missingNumber);
   }
}

输出

Enter the n value:
5
Enter (n-1) numbers:
1
2
4
5
Missing number is: 3

相关文章