原题
Given an array of integers, every element appears twice except for one. Find that single one.
题目意思
整数数组,除了一个出现一次外,其他都是两次。求这个唯一出现一次的数。
题目分析
首先想到借助哈希表,向哈希表中添加,若已存在移除,最后剩下的唯一元素,即为这个唯一出现一次的数。
代码实现
这个算法能解决这个问题,因为每个数要么出现1次(只有1个出现1次),要么出现2次,所以如果哈希集合中有了这个元素,表示是重复的那个,直接移除掉即可。最后剩下的那个元素便是出现仅1次的。
public static int SingleNumber(int[] nums)
{
HashSet<int> hash = new HashSet<int>();
foreach(int item in nums)
{
if (hash.Contains(item))
hash.Remove(item);
else
hash.Add(item);
}
return hash.Min();
}
位操作算法
异或操作,抵消掉出现2次的元素,仅剩下1个出现1次的元素。
int rslt = nums[0];
for (int i = 1; i < nums.Length;i++ )
{
rslt ^= nums[i];
}
return rslt;