一.题目分析
题目链接https://leetcode.cn/problems/single-number/?envType=study-plan-v2&envId=top-100-liked
虽然这道题看起来十分简单,但是做起来也不难。可以有很多种方法,不过这里我们讲一个比较特殊的方法————位运算。我们在这个题目要使用异或运算符‘^’,我们可以先了解一下这个运算符的特性:
1.运算规则
2.性质
通过异或的运算规则和性质可以得出,在把一堆数通过异或运算后,可以通过自反性把相同的两个数单独运算,因为两个相同的数异或后为1,所以可以把两个相同的数消去。既然这样,我们就可以知道如何通过这种方式解决题目了。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ret=0;
for(int i=0;i<nums.size();i++)
{
ret^=nums[i];
}
return ret;
}
};
具体代码如图。把是所有数组中的数异或后,相同的两个数变成1,只剩下那个单独的数,这样就求出了答案。