首页 > 编程语言 > 详细

数组中只出现一次的数字

时间:2020-03-07 11:29:45      阅读:36      评论:0      收藏:0      [点我收藏+]

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

C++11(clang++ 3.9)

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        // input check
        if(data.size() < 2)
        {
            // num1, num2 ???
            return;
        }
        
        int xor_val = 0;
        int len = data.size();
        for(int i = 0; i < len; i++)
        {
            xor_val ^= data[i];
        }
        
        // find the first 1 bit
        int shift_index = 0;
        while(0 == (xor_val & 1))
        {
            xor_val >>= 1;
            shift_index++;
        }
        
        *num1 = 0;
        *num2 = 0;
        
        // use mask to divide data[] into 2 groups 
        // num1 and num2 will be in different groups
        int mask = (1 << shift_index); 
        for(int i = 0; i < len; i++)
        {
            if(0 == (data[i] & mask))
            {
                *num1 ^= data[i];
            }
            else
            {
                *num2 ^= data[i];
            }
        }
    }
};

 

数组中只出现一次的数字

原文:https://www.cnblogs.com/hotwater99/p/12432922.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!