题目描述:给出 n 个整数n 为奇数其中有且仅有一个数出现了奇数次其余的数都出现了偶数次。用线性时间复杂度、常数空间复杂度找出出现了奇数次的那个数。输入:第一行:输入一个整数n 1=n=5106第二行:输入n个整数输出:输出只出现了奇数次的那个数请你用c++编写代码
#include <iostream>
#include <vector>
using namespace std;
int findOddNum(vector<int>& nums) {
int res = 0;
for (int num : nums) {
res ^= num;
}
return res;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
int oddNum = findOddNum(nums);
cout << oddNum << endl;
return 0;
}
解题思路: 由于只有一个数出现了奇数次,其余的数都出现了偶数次,所以可以使用位运算中的异或运算来找出出现了奇数次的那个数。异或运算的性质是:
- 任何数和0进行异或运算,结果仍然是原来的数。
- 任何数和自身进行异或运算,结果为0。
- 异或运算满足交换律和结合律。
根据以上性质,对于给定的 n 个整数,可以将它们依次进行异或运算,最后得到的结果就是只出现了奇数次的那个数。因为偶数次的数异或结果为0,与出现了奇数次的数异或结果为该数本身。所以最后的结果就是只出现了奇数次的那个数
原文地址: https://www.cveoy.top/t/topic/irVw 著作权归作者所有。请勿转载和采集!