在 C++ 中查找 2n+1 个整数元素数组中的单个元素
在这个问题中,我们得到一个包含 (2n+1) 个整数值的数组。在所有这些值中,n 个元素在数组中出现两次,并且数组中只有一个元素出现一次。我们的任务是在 2n+1 个整数元素的数组中查找单个元素。
让我们举个例子来理解这个问题:
输入
arr[] = {1, 3, 5, 6, 5, 1, 3}
输出
5
解决方案方法
解决这个问题的一个简单方法是使用元素计数器。如果遇到一个元素,则存储其值和出现次数。之后,在表中搜索出现次数 = 1 的元素。更高效的解决方案是使用异或 (XOR)。在这里,我们将对数组的所有元素执行异或运算。这个异或运算将使所有出现两次的元素变为 0。而唯一存在的元素值是出现次数为 1 的元素。
这是因为异或的特性:
- a^a = 0 - a^0 = a
程序演示了我们解决方案的工作原理:
示例
#include <iostream> using namespace std; int findSingleValue(int arr[], int n) { int element = 0; for (int i = 0; i < n; i++) element = element ^ arr[i]; return element; } int main() { int arr[] = { 1, 3, 5, 6, 5, 1, 3 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The element of the array with single occurrence is "<<findSingleValue(arr, n); return 0; }
输出
The element of the array with single occurrence is 6
广告