使用 Java 查找数组中缺失的数字10 Sept 2024 | 5 分钟阅读 查找数组中缺失的数字是编程中一个常见的问题。它经常出现在数据验证、错误检查或解决数学谜题等情况下。在本节中,我们将探讨如何使用 Java 编程语言在数组中查找缺失的数字。我们将讨论几种方法和算法来有效地解决这个问题。 方法 1:暴力枚举法查找数组中缺失数字的最简单方法是使用暴力方法。我们可以遍历一个数字范围,并检查每个数字是否存在于数组中。如果数组中找不到某个数字,则认为该数字是缺失的。 文件名:MissingNumbers1.java 输出 Missing numbers in the array: 3 5 在此代码中,我们有一个 findMissingNumbers 函数,它接受一个数组 (arr) 和一个最大值 (max)。它从 1 遍历到 max,并检查数组中是否存在任何数字。如果在数组中找不到某个数字,则将其视为缺失数字并打印到控制台。在 main() 方法中,我们通过将数组和最大值作为实例来调用 findMissingNumbers() 函数,它会像输出一样打印出缺失的数字。 该方法有效,但其时间复杂度为 O(n * m),其中 n 是数组的大小,m 是要检查缺失数字的最大值。对于大型数据集,此方法效率不高。 方法 2:使用 HashSet更有效的方法是使用 HashSet 来检查数组中的数字。我们可以遍历数组,将每个元素添加到 HashSet 中,然后遍历一个范围,检查 HashSet 中是否存在任何数字,并检查缺失的数字 文件名:MissingNumbers2.java 输出 Missing numbers in the array: 3 5 在此代码中,我们使用 HashSet 来检查数组中是否存在元素。findMissingNumbers 函数返回输入数组的内容,将每个元素添加到 HashSet。然后,它从 1 遍历到 max,并检查 HashSet 中是否存在任何数字。如果找不到,则该数字被视为缺失,并像输出一样打印到控制台。 使用 HashSet 可将时间复杂度降低到 O(n),使其成为查找缺失数字的更有效解决方案。 方法 3:使用算术级数如果数字包含一系列数字,并且我们知道期望数字和实际数字,我们可以计算期望数字并将数组中的实际数字相减来找到缺失的数字。 文件名:MissingNumbers3.java 输出 Missing numbers in the array: 3 5 在此代码中,我们使用提供的公式来计算指定范围内的期望数字总数,并将其与数组中的所有实际项进行比较。期望数字和实际数字之间的差异代表了缺失的数字。然后,我们从 min 遍历到 max,打印出任何小于或等于 missingSum 的数字。输出显示了指定范围内的缺失数字。 当存在已知数字范围且数组包含连续元素时,此方法特别有用。 这是一个 Java 程序,它结合了查找缺失数字的所有三种方法并提供了输出。 文件名:MissingNumbersAllMethods.java 输出 Method 1: Using nested loops 3 5 Method 2: Using a HashSet 3 5 Method 3: Using the expected sum 3 5 在此代码中,我们将所有三种方法组合到一个程序中。它首先使用嵌套循环方法,然后使用 HashSet 方法,最后使用基于期望总和的方法。输出显示所有三种方法都为提供的输入数组产生了相同的结果。 结论查找数组中缺失的数字是一个常见的编程问题,可以使用各种方法来解决。方法的选择取决于您问题的具体要求。虽然暴力方法可能适用于小型数据集,但对于大型数组,应使用更有效的方法(如 HashSet 或算术级数)来优化时间复杂度。通过应用正确的技术,我们可以使用 Java 有效地定位和识别数组中的缺失数字。 下一主题Java 中的良好数字程序 |
在输入中,给出了一个数字 n。我们的任务是找到从 1 到 n 的数字与数字 N 的 LCM 的总和。换句话说,我们需要找到 lcm(1, n) + lcm(2, n) + lcm(3, n)... 的值。
阅读 8 分钟
Java 8 引入的 java.util.function 包包含 ToLongBiFunction 接口,该接口用于在 Java 中实现函数式编程。它表示一个在接受两个 T 和 U 类型的参数后返回 long 类型结果的函数。它接受两个泛型...
阅读 2 分钟
基于树的问题中的重复任务需要将二叉树转换为二叉搜索树(BST)。有序二叉搜索树序列使得通过元素重组将任何二叉树转换为 BST 成为可能。必须建立一种方法来查找最小的...
5 分钟阅读
我们可以通过 reverse()、split()、toLowerCase()、toUpperCase() 和 substring() 方法来反转字符串中每个单词的大小写。通过 split("\\s") 方法,我们可以将所有单词获取到一个数组中。要获取第一个字符,我们可以使用 substring() 或 charAt()...
阅读1分钟
在计算问题中,在二进制矩阵中查找最大矩形是经典的挑战性问题,它测试了对动态规划和基于堆栈的方法的理解。该问题通常出现在图像处理、计算机视觉甚至游戏开发等各种领域。在此...
阅读 6 分钟
在 Java 中,变量是保存值的容器。变量名表示内存位置的名称。每个变量包含三个元素:数据类型、变量名和值。变量可能具有作用域(私有、受保护),但这取决于需求。数据类型:它定义...
阅读 4 分钟
Java DecimalFormat 类的 getPositivePrefix() 方法用于检索此 DecimalFormat 实例的正前缀值。语法:public String getPositivePrefix() 参数:此方法不接受任何参数。返回值:此方法返回此 DecimalFormat 对象的正前缀值。示例 1:数字的格式化选项...
阅读 2 分钟
Java vs Kotlin Java 和 Kotlin 都是面向对象编程语言。但两者用于不同目的。Kotlin 用于开发 Android 应用程序,而 Java 主要用于开发企业应用程序。在本节中,我们讨论了 Java 和 Kotlin 之间的区别。Java Java 是...
5 分钟阅读
Java 中保存双精度数据的缓冲区称为 DoubleBuffer。它属于 Java.nio 包,是 Buffer 类的子类。通过使用 flip() 方法,可以将缓冲区准备好在写入数据后读取数据,反之亦然。首先...
阅读 3 分钟
Java 中的抽象与封装 Java 是一种面向对象的编程语言,它遵循 OOPs 概念。OOPs 概念包括类、对象、多态、继承。OOPs 还有其他两个特性,即抽象和封装。它们看起来非常相似,但在概念和实现上完全不同。主要的...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India