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

    /*(1)对整个数组进行异或,结果为只出现一次的两个数字异或的结果
    (2)找到一个为1的异或结果的下标,根据该下标将数组分成两个部分
    (3)分别对这两个部分进行异或,则结果是这两个数字
    */

    class Solution {
    public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
    /*(1)对整个数组进行异或,结果为只出现一次的两个数字异或的结果
    (2)找到一个为1的异或结果的下标,根据该下标将数组分成两个部分
    (3)分别对这两个部分进行异或,则结果是这两个数字
    */
    if(data.size()<2)return ;
    //异或整个数组
    int DataOr=data[0];
    for(int i=1;i<data.size();i++)
    DataOr^=data[i];
    //找到一个出现1的下标
    int index=0;
    while((DataOr&1)==0)
    {
    DataOr=DataOr>>1;
    index++;
    }
    //对第index位进行异或
    *num1=*num2=0;
    for(int i=0;i<data.size();i++)
    {
    if(Bit(data[i],index))
    {
    *num1^=data[i];

    }
    else
    *num2^=data[i];
    }
    }
    bool Bit(int num,int index)
    {
    num=num>>index;
    return (num&1);
    }
    };

  • 相关阅读:
    判断平衡二叉树 --牛客网
    二叉树深度 --牛客网
    重建二叉树 来源:牛客网
    快速排序
    30天自制操作系统笔记(第四天)
    pat 1047
    机器学习 周志华 第1章习题
    POJ 3126 Prime Path
    POJ 3279 Fliptile
    POJ 3278 Catch That Cow
  • 原文地址:https://www.cnblogs.com/xiaoji123/p/10606035.html
Copyright © 2011-2022 走看看