zoukankan      html  css  js  c++  java
  • 数组中只出现一次的数字

    题目描述

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

    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];
                }
            }
        }
    };
  • 相关阅读:
    菜鸟涂鸦作品展_No.29
    菜鸟涂鸦作品展_No.27
    菜鸟涂鸦作品展_No.26
    关注的前沿动态
    货币转换
    第二周总结
    老鼠
    71 打印沙漏
    学习总结0.0
    第五周作业
  • 原文地址:https://www.cnblogs.com/hotwater99/p/12432922.html
Copyright © 2011-2022 走看看