#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,与出现了奇数次的数异或结果为该数本身。所以最后的结果就是只出现了奇数次的那个数

题目描述:给出 n 个整数n 为奇数其中有且仅有一个数出现了奇数次其余的数都出现了偶数次。用线性时间复杂度、常数空间复杂度找出出现了奇数次的那个数。输入:第一行:输入一个整数n 1=n=5106第二行:输入n个整数输出:输出只出现了奇数次的那个数请你用c++编写代码

原文地址: https://www.cveoy.top/t/topic/irVw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录