Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
题目标签:Hash Table
题目给了我们一个 nums array, array 里只有一个数字是只出现一次的,剩余的都是出现2次的。让我们找出这个只出现一次的数字。
方法一:
首先想到的是Hash Set,遍历nums,遇到的数字没有在set 里的,就存入;遇到的数字已经在set 里了,就去除。剩下的数字就是那个只出现一次的数字。
方法二:
既然题目中还说了不需要用额外的空间,这里可以用XOR,它的特性就是 num ^ num = 0,把所有的数字都 XOR, 它会把相同的两个数字化为0,剩下的就是落单的那个数字。
Java Solution 1:
Runtime beats 14.51%
完成日期:05/16/2017
关键词:HashSet
关键点:利用HashSet来保存,去除数字,剩下的是落单的数
class Solution
{
public int singleNumber(int[] nums)
{
HashSet<Integer> set = new HashSet<>(); for(int num: nums)
{
if(set.contains(num))
set.remove(num);
else
set.add(num);
} return set.iterator().next(); }
}
参考资料:N/A
Java Solution 2:
Runtime beats 41.35%
完成日期:05/16/2017
关键词:Bit Manipulation
关键点:XOR
class Solution
{
public int singleNumber(int[] nums)
{
int res = nums[0]; for(int i=1; i<nums.length; i++)
res ^= nums[i]; return res;
}
}
参考资料:N/A
LeetCode 题目列表 - LeetCode Questions List