在另一个数组中查找丢失的数字,这是C ++中的混洗副本

假设我们有两个数组A和B,数组A有n个元素。第二个数组B具有A的所有元素,但将它们混排并删除了一个元素。我们必须找到缺失的元素。因此,如果A = [4,8,1,3,7],而B = [7,4,3,1],则输出为8。

可以使用XOR技巧解决。每个元素的组合出现次数是两次,一个在A中,另一个出现在B中,除了一个元素在A中仅出现一次。我们知道x XOR x = 0,所以如果我们在两个元素的元素中执行XOR数组。结果将缺少数字。

示例

#include<iostream>
using namespace std;
int FindMissingElement(int A[], int B[], int n) {
   int min_element = 0;
   for (int i = 0; i < n; i++)
   min_element = min_element ^ A[i];
   for (int i = 0; i < n - 1; i++)
   min_element = min_element ^ B[i];
   return min_element;
}
int main() {
   int A[] = {4, 8, 1, 3, 7};
   int B[] = {7, 4, 3, 1};
   int n = sizeof(A) / sizeof(A[0]);
   cout << "Missing element: " << FindMissingElement(A, B, n);
}

输出结果

Missing element: 8
猜你喜欢