给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。(来源LeetCode)

异或的解法

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。与0异或,取决于X本身

(a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;)

var singleNumber = function(nums) {

var num=0;

    for(i=0;i<nums.length;i++){

        num^=nums[i];

    }

    return num;

};

var singleNumber = function(nums) {

//第一种解法

//执行用时 :1624 ms, 在所有 javascript 提交中击败了5.07%的用户

//内存消耗 :49.9 MB, 在所有 javascript 提交中击败了5.03%的用户

//   var len=nums.length,i=0;

//    while(i<len){

//        var tar=nums[i];

//        var numsN =[];

//        if(i==0){

//            numsN=nums.slice(i+1);

//        } else{

//            numsN= numsN.concat(nums.slice(0,i),nums.slice(i+1));

//        }

       

//        var flag=numsN.includes(tar);

//        if(flag==false){

//            return tar;

//        }

//       i++;

//    }

//第二种解法

// 执行用时 :200 ms, 在所有 javascript 提交中击败了21.29%的用户

// 内存消耗 :37.4 MB, 在所有 javascript 提交中击败了21.34%的用户

 

 var numsN =[] ,len=nums.length,i=0;

 for( i= 0;i<len;i++){

     var tem=numsN.indexOf(nums[i]);

     if(tem==-1){

         numsN.push(nums[i]);

     }else{

        numsN.splice(tem,1);

        

     }

   

 }

   return numsN[0];

};

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值