zoukankan      html  css  js  c++  java
  • 数组中出现一次的两个数(三个数)& 求最后一位bit为1

    对于两个数,对于结果中,剩余bit1来异或区分。

    下面的解法,非常精简:

    int lastBitOf1(int number)
    {
        return number & ~(number - 1);
    }
     
    void getTwoUnique(vector<int>::iterator begin, vector<int>::iterator end, vector<int>& unique)
    {
        int xorResult = 0;
        for(vector<int>::iterator iter = begin; iter != end; ++iter)
            xorResult ^= *iter;
       
        int diff = lastBitOf1(xorResult);
       
        int first = 0;
        int second = 0;
       
        for(vector<int>::iterator iter = begin; iter != end; ++iter)
        {
            if(diff & *iter)
                first ^= *iter;
            else
                second ^= *iter;
        }
       
        unique.push_back(first);
        unique.push_back(second);
    }

    对于有三个数的情况,复杂一些:

    要用到异或结果跟所有数异或的最后一位,再异或。如下:

    http://blog.csdn.net/sunmenggmail/article/details/8035008

    1. for(iter = numbers.begin(); iter != numbers.end(); ++iter)  
    2.         flags ^= lastBitOf1(xorResult ^ *iter);  
    3.     flags = lastBitOf1(flags);  
  • 相关阅读:
    张旭结对编程作业
    团队第一次作业(软工C#造梦厂)
    张旭第二次作业
    跨域问题
    .Net Core3.1使用AspectCore
    .Net中HttpClient之SendAsync方法
    两个具有相同属性的类赋值
    工具类--HttpUtils
    工具类--CacheHelper
    工具类--JsonHelper
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6445484.html
Copyright © 2011-2022 走看看