在另一个数组中查找丢失的数字,这是C ++中的混洗副本
假设我们有两个数组A和B,数组A有n个元素。第二个数组B具有A的所有元素,但将它们混排并删除了一个元素。我们必须找到缺失的元素。因此,如果A=[4,8,1,3,7],而B=[7,4,3,1],则输出为8。
可以使用XOR技巧解决。每个元素的组合出现次数是两次,一个在A中,另一个出现在B中,除了一个元素在A中仅出现一次。我们知道xXORx=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