大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
这道题目考察的知识点是位运算和异或操作。异或操作是一种位运算,它有以下性质:
- 任何数和0做异或运算,结果仍然是原来的数:a ^ 0 = a
- 任何数和自身做异或运算,结果是0:a ^ a = 0
- 异或运算满足交换律和结合律:a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b
根据以上性质,如果我们将所有的数进行异或运算,那么出现两次的标识都会被抵消成0,而只出现一次的标识与0进行异或运算后仍然保持原值。因此,最后得到的结果就是只出现一次的牛的标识。
思路如下:
- 初始化一个变量result为0,用于存储异或运算的结果。
- 遍历nums数组,将result与每个元素进行异或运算。
- 最终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; } };