Java 程序查找丢失的数字

javaobject oriented programmingprogramming更新于 2024/8/5 17:03:00

丢失的数字是连续元素流或数组中丢失的数字。在本节中,我们将讨论使用 Java 编程语言在元素流中查找丢失数字的各种方法。

数组中丢失数字的示例

丢失数字是数组中连续数字序列中缺失的数字。

考虑一个数组;

arr=[1,2,3,4,5,6,8]

在上面的数组"arr"中,7 缺失,因此 7 是丢失的数字

示例 2

考虑一个数组;

arr=[1,2,3,4,5,6,7,8,9,11]

在上面的数组"arr"中,10 缺失,因此 10 是丢失的数字数字

现在,我们将讨论在 Java 中查找流中丢失的数字的各种方法。

方法 1:使用 stream() 和 sum() 方法

在此方法中,我们使用 stream() 函数并将数组转换为流,然后使用 sum() 函数计算流的总和并存储在"actualsum"变量中,然后我们使用公式 n*(n+1)/2 计算预期总和,然后我们使用预期总和 - 实际总和找到丢失的数字。

算法

  • 用一些值初始化一个数组。

  • 使用 stream() 和 sum() 方法计算数组的总和

  • 计算数组的长度并使用 n 项总和公式找到连续数字的预期总和。

  • 减去预期值和sum,将其分配给变量并打印。

Stream() − 'Stream()' 方法用于创建元素流,以便我们可以使用 filter()、map()、reduce() 等方法来处理数据

Arrays.stream(collection)

sum() − 此方法用于计算集合中所有元素的总和。

stream.sum()

示例

在此示例中,我们将使用 stream() 和 sum() 方法通过 java 查找丢失的数字。

import java.util.Arrays;
public class Main {
   public static void main(String[] args) {
      int[] array = {1, 2, 3, 5};
      int sum = Arrays.stream(array).sum(); 
      int n = array.length + 1; 
      int expectedvalue = (n * (n + 1)) / 2; 
      int lostnumber = expectedvalue - sum; 
      System.out.println("丢失的数字 " + lostnumber);
   }
}

输出

丢失的数字 4

方法 2:使用 XOR

在此方法中,我们计算 n 个值的 XOR 并将其存储在 expectedValue 变量中,然后计算 XOR 的 actualValue,最后对 expectedValue 和 actualValue 进行 XOR 以获得丢失的数字。

算法

  • 用一些值初始化一个数组。

  • 计算数组的长度并加 1,因为我认为数组中的实际数字应该是 array.length+1 并分配给变量"n"。

  • 将预期值设置为 1,并使用 for 循环使用 XOR 运算符计算预期值,直到 n。

  • 将预期值设置为 array[0] 并计算使用 XOR 运算符对数组中存在的元素进行 for 循环,计算实际值。

  • 使用 XOR 运算符对预期值和实际值计算丢失的数字并打印出来

XOR 运算 (^) − XOR 运算执行按位运算,如果两位都是 1,则返回 1,否则返回 0。它由 ^ 表示。

A ^ b // 其中 'a' 和 'b' 是整数。

示例

在此示例中,我们将使用 XOR 运算符并使用 java 查找丢失的数字。

public class Main {
   public static void main(String[] args) {
    int[] array = {1, 2, 3, 5}; // 输入包含缺失数字的数组
    int n = array.length + 1; // 如果没有缺失数字,则为元素总数
    int expectedValue = 1; // 如果没有缺失数字,则为预期 XOR 值
    for (int i = 2; i <= n; i++) {
        expectedValue ^= i; // 对从 1 到 n 的所有元素进行 XOR 以获得预期值
    }
    int actualValue = array[0]; // 从数组的第一个元素开始
    for (int i = 1; i < array.length; i++) {
        actualValue ^= array[i]; // 对数组的所有元素进行 XOR 以获得实际值
    }
    int lostNumber = expectedValue ^ actualValue; // 对预期值和实际值进行 XOR 以获得丢失的数字
    System.out.println("丢失的数字是 " + lostNumber);
   }
}

输出

丢失的数字是 4

方法 3:使用 HashSet

在此示例中,我们将使用数据结构 Hashset 和 Hashset 的内置方法通过 java 查找丢失的数字。

算法

  • 用一些值初始化一个数组。

  • 创建一个 hashset 并使用 for 循环迭代该数组并将值添加到 hashset。

  • 使用 for 循环,迭代 i 到 array.length+1,并使用 contains() 方法检查集合中的缺失值并打印丢失的数字。

HashSet − Hashset 是一个无序的对象集合,不允许重复元素。

HashSet<datatype> objName = new HashSet<datatype>();

contains() − 此方法检查集合中是否存在某个值,并返回一个布尔值。

setObjName.contains(value)

示例

在这种方法中,我们将数组的所有元素存储在 HashSet 中,然后从 1 迭代到 array.length+1 个值,并检查集合中是否存在所有值,如果任何值不存在,则为 lostnumber 值,然后我们将其打印出来。

import java.util.Arrays;
import java.util.HashSet;

public class Main {
   public static void main(String[] args) {
      int[] array = {1, 2, 3, 5};
      HashSet<Integer> set = new HashSet<Integer>();
      for (int i : array) {
         set.add(i); 
      }
      for (int i = 1; i <= array.length + 1; i++) {
         if (!set.contains(i)) { 
            System.out.println("丢失的数字: " + i);
            break;
         }
      }
   }
}

输出

丢失的数字:4

因此,在本文中,我们学习了使用 Java 编程语言查找丢失的数字的不同方法。


相关文章