力扣p136 只出现一次的数字
题目简述
这个题目很有意思,说实话,第一反应想到哈希表,相信大部分人都是这样子,不过重点在划横线的地方,这需要我们的代码时间复杂度O(n),空间复杂度O(1),这就不能使用,我也是参考别人题解看到异或的方法。
异或运算符有一个性质:自反:a ⊕ b ⊕ a = b,所以遍历过去出现两次的数字对出现一次的数字没有影响,最后结果就是出现一次的数字。
代码块
class Solution
{
public:
int singleNumber(vector<int>& nums)
{
int val = nums[0]; //把初值赋给val;
for(int i = 1; i < nums.size(); i++) //一个一个异或遍历。
{
val ^= nums[i];
}
return val;
}
};
题目总结
我感觉很有意义,巩固了对异或的使用和掌握了一种空间复杂度O(1)的寻找只出现一次的方法。