Leetcode-136-只出现一次的数字
题目链接
题目描述
给定一个非空整数数组,只有一个元素只出现一次,其余每个元素均出现两次。
找出只出现了一次的元素。
要求:
O(n)的时间复杂度,不使用额外的空间。
(好久没做题了,写几道简单的找找手感😁)
思路:
-
因为重复的元素都是两个,首先想到是排序,然后两个两个去判断。
但是排序最快一般也是O(nlogn),不符合要求。(✖) -
然后想到的是用哈希表,但是不能使用额外的空间。(✖)
-
看了解析才明白用抑或(^)运算😅,两个数的抑或其实就是二进制层的不进位加法,
所以两个a抑或后就是0,再与b抑或结果就是b。
另外: 抑或运算有 交换律 和 结合律。
C++方法
输入的是处理好的数组,放入vector容器中。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res = 0;
for (int i = 0; i < nums.size(); i++)
res ^= nums[i];
return res;
}
};