给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 1.题目解析 (1)线性时间复杂度:要求代码时间复杂度是O(n); (2)不使用额外空间:要求代码空间复杂度是O(1); (3)只有一个元素出现一次,其它元素都是出现两次。 2.知识点 异或定义:两个bit位相等则为false(0),不等则为false(1); 异或性质(xor是异或的计算机符号): 交换律:A xor B = B xor A 归零率:a xor a = 0 恒等率:a xor 0 = a 异或也叫半加运算:其运算法则相当于不带进位的二进制加法。 3.解题思路 根据上述异或性质,可知:数组中所有两个相等元素异或结果都为0,等于只有一个元素与0异或就等于这个元素。 4.代码class Solution { public: int singleNumber(vector& nums) { if (nums.size() == 0) { return -1; } int num = 0; for (int i : nums) { num ^= i; } return num; } };