大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

这道题目考察的知识点是位运算和异或操作。异或操作是一种位运算,它有以下性质:

  • 任何数和0做异或运算,结果仍然是原来的数:a ^ 0 = a
  • 任何数和自身做异或运算,结果是0:a ^ a = 0
  • 异或运算满足交换律和结合律:a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b

根据以上性质,如果我们将所有的数进行异或运算,那么出现两次的标识都会被抵消成0,而只出现一次的标识与0进行异或运算后仍然保持原值。因此,最后得到的结果就是只出现一次的牛的标识。

思路如下:

  1. 初始化一个变量result为0,用于存储异或运算的结果。
  2. 遍历nums数组,将result与每个元素进行异或运算。
  3. 最终result的值即为只出现一次的牛的标识。

下面是用C++实现的完整代码:

#include <vector>

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int singleNumber(vector<int>& nums) {
        int result = 0;
        for (int num : nums) {
            result ^= num;
        }
        return result;
    }
};