Java 中的最小 XOR 值对2024 年 9 月 10 日 | 阅读 8 分钟 给定一个包含非负数的数组,我们的任务是找出代表数组中两个数字的最小 XOR 值的值。考虑以下示例。 示例 1 输入: int a[] = {10, 8, 5, 3, 1}; 输出 2 解释: 在给定的数组中,我们可以形成 10 对 (10, 8) = 10 ^ 8 = 2 (10, 5) = 10 ^ 5 = 15 (10, 3) = 10 ^ 3 = 9 (10, 1) = 10 ^ 1 = 11 (8, 5) = 8 ^ 5 = 13 (8, 3) = 8 ^ 3 = 11 (8, 1) = 8 ^ 1 = 9 (5, 3) = 5 ^ 3 = 6 (5, 1) = 5 ^ 1 = 4 (3, 1) = 3 ^ 1 = 2 我们看到所有上述对的最小 XOR 值为 2。 示例 2 输入: int a[] = {3, 5, 7, 2}; 输出 1 解释: 在给定的数组中,我们可以形成 6 对。 (3, 5) = 3 ^ 5 = 6 (3, 7) = 3 ^ 7 = 4 (3, 2) = 3 ^ 2 = 1 (5, 7) = 5 ^ 7 = 2 (5, 2) = 5 ^ 2 = 7 (7, 2) = 7 ^ 2 = 5 我们看到所有上述对的最小 XOR 值为 1。 朴素方法方法很简单,找出给定数组中存在的每个元素的对。计算每对的 XOR 并找出最小 XOR 值。让我们在以下程序中看看它是如何实现的。 文件名: MinXORVal.java 输出 For the array: 10 8 5 3 1 The minimum XOR value is: 2 For the array: 3 5 7 2 The minimum XOR value is: 1 时间复杂度:在上面的程序中,我们在 findMinXorVal() 方法中使用了两层嵌套的 for 循环。由于外层循环的每次迭代,内层循环的时间复杂度为 O(n)。因此,该程序 O(n2) 的总体时间复杂度,其中 n 是输入数组中元素的总数。 使用排序在此方法中,我们将对输入数组进行排序,并使用单个循环找到最小 XOR 值。排序方法有效,因为两个相近的数字的 XOR 值比相距较远的数字的 XOR 值要小。例如:1 ^ 8 = 9 & 4 ^ 5 = 1。这是因为 4 和 5 之间的差值为 1,而 1 和 8 之间的差值为 7。因此,当我们进行排序时,彼此接近的数字会排在一起,然后我们只需要运行一个循环并找到连续元素的 XOR。观察下面的程序。 文件名: MinXORVal1.java 输出 For the array: 10 8 5 3 1 The minimum XOR value is: 2 For the array: 3 5 7 2 The minimum XOR value is: 1 时间复杂度:在上面的程序中,我们使用了排序和一个 for 循环。排序需要 O(nlog(n)) 时间,循环需要 O(n) 时间。因此,O(n + nlog(n)) 的上述程序的总体时间复杂度,其中 n 是输入数组中元素的总数。请注意,此方法比前一种方法更好。 使用 TRIE使用 TRIE,我们将获得最优化的解决方案,因为我们可以在甚至少于 O(nlog(n)) 的时间内解决问题。让我们看看它的算法。 步骤 1:制作一个空的 TRIE,使得 TRIE 的每个节点都有两个子节点,一个用于 0 位,另一个用于 1 位。 步骤 2:初始化 minXorVal 为 INT_MAX,并将 a[0] 插入 TRIE。 步骤 3:逐个遍历数组中的所有元素,从第二个元素开始,并执行以下操作
步骤 4:返回 minXorVal 文件名: MinXORVal2.java 输出 For the array: 10 8 5 3 1 The minimum XOR value is: 2 For the array: 3 5 7 2 The minimum XOR value is: 1 时间复杂度:O(n),其中 n 是数组中元素的总数。 下一个主题Java 中的 Iccanobif 数字 |
技术日新月异。有时,我们需要定期在服务器上执行作业。在服务器上手动运行作业是一项困难的任务,用户或管理员无法多次完成。为了...
阅读 8 分钟
在 Java 编程世界中,数据结构在正确处理和组织数据方面发挥着关键作用。其中一种非常有益的事实结构是 EnumMap。EnumMaps 是 Java 中专门的 Map 实现,旨在与 Enum 键一起使用。在...
阅读 8 分钟
在数论领域,Kaprekar 数因其有趣的性质而占有特殊地位。这些数字以印度数学家 D. R. Kaprekar 的名字命名,它们具有一个独特的特性,即可以将它们分成两部分,这两部分的平方相加可以得到...
5 分钟阅读
在 Java 程序中使用 JavaBeans 允许我们将许多对象封装到一个称为 Bean 的单个对象中。Java 是一种面向对象的编程语言,它使得“一次开发,随处运行和重用”变得最为重要。然而,JavaBeans 通过… 为 Java 程序增加了可重用性。
阅读 2 分钟
国际化是开发软件应用程序的过程,使其能够进行各种语言和区域的更改,而无需修改应用程序。开发本地化应用程序会增加应用程序的成本,还需要大量的维护。本地化是适应国际化...
阅读 10 分钟
双生素数是相差2的两个素数。素数之间的差为2的素数被称为双生素数。双生素数一词用于一对双生素数。……
5 分钟阅读
在 Java 8 的 Collections 排序中,Lambda 表达式和 Collections 接口起着重要作用。有多种方法可以通过 Java 8 Lambda 表达式对列表进行排序。但是 Collections 接口本身提供了一些排序方法,通过这些方法我们可以轻松地对...
7 分钟阅读
ASCII 代表美国信息交换标准代码。ASCII 是一种标准数据传输代码,计算机用于表示文本数据和控制字符。ASCII 是一种 7 位字符集,包含 128 个字符,即从 0 到 127。ASCII 表示...
阅读 12 分钟
Java 中的 BreakIterator ious() 方法及示例 java.text.BreakIterator 类包含一个 ious() 方法。通过调用 current() 方法可以获得当前边界,而使用 BreakIterator 类可以获得其后面 ious 边界的索引。它给出了第一个...的偏移量。
阅读 3 分钟
java.text.RuleBasedCollator 类有一个 compare() 函数。当比较两个对象的强度时,RuleBasedCollator 类用于比较结果。根据比较,该类返回一个正数或负数。语法:public int compare(Object obj1, Object obj2) 参数:...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。

我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India