Java 中除了自身之外的数组元素异或2024年9月26日 | 阅读 5 分钟 这是一个在顶级 IT 公司(如 Google、Amazon、TCS、Accenture 等)面试中经常被问到的问题。通过解决这个问题,人们希望考察面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将讨论 Java 中数组元素除了自身之外的异或运算,采用不同的方法和逻辑。此外,我们还将为此创建 Java 程序。 问题陈述我们给定一个只包含非负元素的数组。任务是创建另一个数组(例如 output[]),使得 output[i] 包含输入数组中除了 input[i] 之外所有元素的异或运算结果。以下示例对此进行了说明。 让我们通过示例来理解。 示例 1 输入: int input[] = {4, 7, 9, 3, 2, 5, 6} 输出: output[] = {12, 15, 1, 11, 10, 13, 14} 解释: 如果我们排除当前元素并对其余元素进行异或运算,我们得到上述输出。请观察以下内容。 output[0] = 7 ^ 9 ^ 3 ^ 2 ^ 5 ^ 6 = 12 output[1] = 4 ^ 9 ^ 3 ^ 2 ^ 5 ^ 6 = 15 output[2] = 4 ^ 7 ^ 3 ^ 2 ^ 5 ^ 6 = 1 output[3] = 4 ^ 7 ^ 9 ^ 2 ^ 5 ^ 6 = 11 output[4] = 7 ^ 9 ^ 3 ^ 5 ^ 6 = 10 output[5] = 4 ^ 7 ^ 9 ^ 3 ^ 2 ^ 6 = 13 output[6] = 4 ^ 7 ^ 9 ^ 3 ^ 2 ^ 5 = 14 示例 2 输入: int input[] = {0, 6, 2, 9} 输出: output[] = {13, 11, 15, 4} 说明 output[0] = 6 ^ 2 ^ 9 = 13 output[1] = 0 ^ 2 ^ 9 = 11 output[2] = 0 ^ 6 ^ 9 = 15 output[3] = 0 ^ 6 ^ 2 = 4 问题解决方案朴素方法在此方法中,我们将使用嵌套的 for 循环来计算除了自身之外所有元素的异或运算结果。 文件名: XorArrElements.java 输出 For the input array: 4 7 9 3 2 5 6 The output array is: 12 15 1 11 10 13 14 For the input array: 0 6 2 9 The output array is: 13 11 15 4 复杂度分析: 该程序使用嵌套的 for 循环。因此,上述程序的时间复杂度为 O(n2),其中 n 是输入数组中存在的元素总数。该程序没有使用任何额外的空间。因此,程序的空间复杂度是常数,即 O(1)。 程序的时??复杂度可以进一步降低。以下方法对此进行了说明。 计算所有元素的异或运算我们知道,如果两个数字相等,它们的异或运算结果总是零。因此,我们可以计算所有元素的异或运算结果,并且要排除任何元素,只需将所有元素的异或运算结果与该元素进行异或运算。让我们通过一个例子来理解它。 int arr[] = {a1, a2, a3, a4, a5, a6}, size = 6 因此,output[0] = (a1 ^ a2 ^ a3 ^ a4 ^ a5 ^ a6) ^ a1, 我们知道异或运算是可交换的。因此,我们可以将 a1 分组在一起 output[0] = (a1 ^ a1 ^ a2 ^ a3 ^ a4 ^ a5 ^ a6) = 0 ^ a2 ^ a3 ^ a4 ^ a5 ^ a6 (因为 a1 ^ a1 = 0) 这正是除了元素本身之外所有元素的异或运算结果。以下程序使用了相同的概念。 文件名: XorArrElements1.java 输出 For the input array: 4 7 9 3 2 5 6 The output array is: 12 15 1 11 10 13 14 For the input array: 0 6 2 9 The output array is: 13 11 15 4 复杂度分析: 该程序的时间复杂度为 O(n),其中 n 是输入数组中存在的元素总数。程序的空间复杂度与上述相同。 下一个主题Java 中链表的倒数第 N 个节点 |
我们请求您订阅我们的新闻通讯以获取最新更新。