您的位置:首页 > 其它

LeetCode 136. Single Number (落单的数)

2017-10-25 11:03 453 查看

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: