[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;  
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值