在 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

更新于:2021-3-16

234 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告