一、题目介绍
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
二、解题思路
(1)本题可以使用哈希集合来实现,遍历整个数组,如果当前元素不存那么insert到哈希集合中,如果存在则将哈希集合中的这个元素erase掉,最终哈希集合中剩下的即为只出现一次的元素。
(2)上面的解法不太巧妙,通过题目可知,除了某个元素之外,其余每个元素均出现两次。利用这一特点,我们可以通过异或运算来解题。因为两个相同的元素异或之后是0,所以遍历数组,依次让每个元素进行异或,最终异或的结果即为所求。
三、解题代码
第一中方法的实现方式很简单,因此这里只展示第二种方法。
class Solution {
public:
int singleNumber(vector<int>& nums) {
//因为题目中已经说明,除了结果其他元素都出现两次
int ans = nums[0];
for(int i = 1; i < nums.size(); ++i)
{
//两个相同的数进行异或结果为0
ans = ans ^ nums[i];
}
return ans;
}
};