[LeetCode]:Single Number III

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;  
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章