给定一个整数数组,其中一个数字(整数)必须重复奇数次,我们必须找到一个整数。
示例
Input: Array elements are: [1, 4, 6, 1, 9, 6, 4] Output: In this array output will be 9
有两种找到它的方法:
在这种方法中,我们将不得不遍历数组多次,并计算该数组中每个整数的出现次数。这将给我们O(n 2)时间复杂性,因为我们必须遍历所有n个元素的每个数字。
此方法是最佳方法,因为它具有O(n)时间复杂度,因为仅遍历数组一次即可找到解决方案。此方法使用位操作。
A B Y 0 0 0 0 1 1 1 0 1 1 1 0
当给定两个相同的数字作为输入时,输出为零,而给定数字(例如x)和零作为输入时,它将给输出相同的数字(x)。
现在让我们举一个例子,使它更容易理解。
[1, 4, 6, 1, 9, 6, 4] At first result=0 Then, 0^1 = 1 result = 1 1^4 = 5 result = 5 5^6 = 3 result = 3 3^1 = 2 result = 2 2^9 = 11 result = 11 11^6 = 13 result = 13 13^4 = 9 result = 9
C ++代码:
#include <iostream> #include <vector> using namespace std; //查找奇数整数的功能 int oddInteger(vector <int> a) { int result=0; for(unsigned int i=0;i<a.size();i++) { result=result^a[i]; } return result; } //测试代码的主要功能 int main() { int n; //输入元素总数 cin >> n; vector<int> a(n); //读取n个数字 for(int i=0;i<n;i++) { cin>>a[i]; } //查找并打印结果 int result = oddInteger(a); cout << result << endl; return 0; }
输出结果
9