码迷,mamicode.com
首页 > 编程语言 > 详细

数组中只出现一次的数字

时间:2018-01-31 22:25:19      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:思路   ==   nbsp   desc   void   oid   log   else   for   

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 
思路:将数字分成两组,每组包含一个只出现一次的数字,再异或求解,时间复杂度为O(logn),空间复杂度为O(1)
 1 class Solution {
 2 public:
 3     void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
 4         if(data.size()==0)return;
 5         int num=data[0];
 6         for(int idx=1; idx<data.size(); ++idx)
 7         {
 8             num=num^data[idx];
 9         }
10         if(num==0)return;
11         int tmp=1;
12         while(!(tmp&num))tmp=tmp<<1;
13         *num1=0;
14         *num2=0;
15         for(int idx=0; idx<data.size(); ++idx)
16         {
17             if(tmp & data[idx])
18             {
19                 *num1=(*num1)^data[idx];
20             }else{
21                 *num2=(*num2)^data[idx];
22             }
23         }
24     }
25 };

 

数组中只出现一次的数字

标签:思路   ==   nbsp   desc   void   oid   log   else   for   

原文地址:https://www.cnblogs.com/jeysin/p/8394804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!