假设我们有两个数组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