您的位置:首页 > 其它

[LeetCode]:Single Number III

2015-12-13 17:34 246 查看
Describe

  Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

Input

nums = [1, 2, 1, 3, 2, 5]


Output

[3, 5]


Analyse

  自己写的算法是用LinkedList来做的,然后一层循环,如果当前nums[i]在LinkedList里面,那么说明这个数是重复的,所以就将这个数从List里面移除,反之就将数加入到List里面,最后List里面剩余的就是那两个只出现一次的数。(⊙v⊙)嗯,怎么说呢,这是正常的逻辑,然后运行也通过了,然后一看时间是505ms,有点慢了,应该是java的原因吧,看看别人的时间吧,哦,2ms!!!

  我待算法如初恋,算法虐我千百遍!

Code

  自己的就不拿出来了,看看大神的吧%>_<%

public class Solution{
public int[] singleNumber(int[] nums){
int diff = 0;
for (int num : nums){
diff ^= num;
}
diff &= -diff;
int[] rets = {0, 0};
for (int num : nums)
{
if ((num & diff) == 0)
rets[0] ^= num;
else
rets[1] ^= num;
}
return rets;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: