Java 中的最大 XOR 值2024 年 9 月 10 日 | 阅读 8 分钟 我们作为输入接收两个包含非负数的数组。我们的任务是找到 p ^ q 的最大值,其中 p 是第一个数组中的任何元素,q 是第二个数组中的任何元素。除了最大值之外,还要显示给出最大 XOR 值的对。如果有多对给出最大 XOR 值,则打印在第一个输入数组中 p 值先出现的对。 示例 1 输入 int inArr1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 输出 30, 对: 10, 20 解释 对于给定的输入数组,所有可能的对的最大 XOR 值都是 30,它来自第一个数组中的元素 10 和第二个数组中的元素 20。 示例 2 输入 int inArr1[] = {25, 10, 2, 8, 5, 3} 输出 28, 对: 25, 5 解释 对于给定的输入数组,最大 XOR 值是 28,它来自第一个数组中的元素 25 和第二个数组中的元素 5。请注意,如果我们从第一个数组中取元素 5,从第二个数组中取元素 25,我们将得到相同的结果。但是,元素 5 来自第一个数组,并且出现在元素 25 之后。因此,它被避免了。 简单方法:使用嵌套 For 循环使用嵌套的 for 循环,我们可以找到最大值。外层循环遍历第一个数组。对于外层循环的每次迭代,使用内层 for 循环遍历第二个数组中的每个元素。对于内层循环的每次迭代,分别计算外层和内层 for 循环的循环变量指向的元素之间的 XOR 值。还要将当前的 XOR 值与迄今为止找到的最大 XOR 值进行比较。如果当前 XOR 值大于迄今为止找到的最大 XOR 值,则更新最大 XOR 值。涉及最大 XOR 值的元素是对。 文件名: MaxXorVal.java 输出 The maximum XOR value is: 30 The pair that gives the max XOR value is: (10, 20) The maximum XOR value is: 28 The pair that gives the max XOR value is: (25, 5) 复杂度分析: 程序使用嵌套的 for 循环,其中外层循环运行 O(m) 时间,对于外层循环的每次迭代,内层循环运行 O(n) 次。因此,程序的时间复杂度为 O(m x n),其中 m 是第一个数组中的总元素数,n 是第二个数组中的总元素数。程序的空间复杂度为 O(1),因为程序不使用任何额外的空间。 方法:使用 TRIE通过找到那些最左侧位值不同的元素,我们可以实现最大 XOR 值。换句话说,如果取自第一个数组的元素 'P' 的第 j 位的值是 1,那么取自第二个数组的元素 'Q' 的第 j 位应该是 0,反之亦然。为了找到这些元素,我们将从最高有效位(最左侧位)开始,向右移动,直到找到一个位,其值在元素 'P' 和 'Q' 的二进制表示中不同。 为了有效地检查第一个数组中的值,我们可以为第二个数组中的每个元素使用 TRIE 数据结构。对于第二个数组的每个元素,我们进行二进制转换并将每个位插入 TRIE。请注意,根将是最高有效位。 现在,我们将遍历第一个数组的每个元素,将其转换为二进制表示,并从最高有效位开始遍历所有位。如果当前位是 '0',则如果存在,我们移动到 '1' 子节点,反之亦然。最后,我们将找到一个对应的元素,使其与第二个数组的当前元素进行 XOR 运算得到最大值。最后,我们将返回找到的所有此类 XOR 值中的最大值。 文件名: MaxXorVal1.java 输出 The maximum XOR value is: 30 The pair that gives the max XOR value is: (10, 20) The maximum XOR value is: 28 The pair that gives the max XOR value is: (25, 5) 复杂度分析: 程序使用两个循环,一个用于第一个数组,另一个用于第二个数组。此外,这两个循环不是嵌套的。对于给定数组中的每个数字,我们还运行一个从 32 到 0 的循环。因此,程序的时间复杂度为 O(32 x (m + n))。此外,程序使用 TRIE 数据结构,该结构用于存储第二个数组的 32 位数字。因此,空间复杂度为 O(32 x n),其中 m 是第一个数组的大小,n 是第二个数组的大小。 |
在 Java 中,类是创建对象的蓝图。它定义了对象的属性和行为。泛型类是可以处理任何类型数据的类。在本文中,我们将探讨如何创建自定义泛型类...
阅读 4 分钟
java.time.chrono.IsoChronology 类有一个 eras() 方法。使用 IsoChronology 类可以检索属于此特定 Iso 日历的所有时代。语法:public List eras() 参数:此方法不接受任何参数。返回值:属于...
阅读 2 分钟
数字序列程序是编码挑战、竞争性编程甚至现实世界应用程序的常见且重要的组成部分。它们涉及生成或查找数字序列中的模式,这使得它们成为任何 Java 程序员的宝贵技能。在本节中,我们将探讨数字……
5 分钟阅读
反转字符串是 Java 中经常执行的任务,可以通过多种方式完成。一种有效的方法是使用 StringBuilder 类的 reverse() 函数来反转字符串的内容。在本节中,我们将介绍如何使用...
阅读 2 分钟
什么是平台?程序运行的环境称为平台。环境包括软件、硬件、库和依赖项。平台独立性是什么意思?当一种编程语言无需任何修改或调整即可在不同操作系统上运行时,称为平台独立性。...
阅读 4 分钟
Java 是一种以其可移植性和灵活性而闻名的编程语言,它包含两个常常让开发人员感到困惑的基本概念:静态和动态。静态意味着某物属于类而不是类的实例(对象)。它也称为编译时行为。动态通常指事物……
阅读9分钟
变量是编程领域中数据存储和操作的基本组成部分。除了使值在程序中可用外,它们还提供了一种临时保存值的方法。但是,并非所有变量都是均等创建的。每个变量都有一个作用域,用于指定...
阅读 3 分钟
Java 是最流行的面向对象编程语言,但它也有一些缺点。主要缺点是编写大量样板代码。为了克服这个缺点,Lombok 项目应运而生。它是一种可以为我们的 Java 应用程序增添色彩的工具。在本节中,...
阅读 13 分钟
锁定框架 Java 中的锁定框架和线程同步机制用于管理对共享资源的并发访问,并确保多线程应用程序中的线程安全。它是一组类和接口,存在于 java.util.concurrent 包中。它提供了一种灵活高效的方式...
阅读 10 分钟
Oracle 公司将于 2024 年 9 月 17 日发布 Java Development Kit (JDK) 23。这是一个备受期待的版本。它包含各种新功能、增强功能和更新。新增强功能提高了性能、安全性和开发者的整体体验。此版本目前处于初始候选发布阶段。它……
14 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India