博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer——面试题40:数组中只出现一次的数字
阅读量:4087 次
发布时间:2019-05-25

本文共 803 字,大约阅读时间需要 2 分钟。

void FindNumsAppearOnce(int data[], int length, int* num1, int* num2){    if (data == NULL || length < 2)        return;     int resultExclusiveOR = 0;    for (int i = 0; i < length; ++ i)        resultExclusiveOR ^= data[i];     unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR);         *num1 = *num2 = 0;    for (int j = 0; j < length; ++ j)    {        if(IsBit1(data[j], indexOf1))            *num1 ^= data[j];        else            *num2 ^= data[j];    }} // 找到num从右边数起第一个是1的位unsigned int FindFirstBitIs1(int num){    int indexBit = 0;    while (((num & 1) == 0) && (indexBit < 8 * sizeof(int)))    {        num = num >> 1;        ++ indexBit;    }     return indexBit;}// 判断数字num的第indexBit位是不是1bool IsBit1(int num, unsigned int indexBit){    num = num >> indexBit;    return (num & 1);}

你可能感兴趣的文章
Flutter 布局控件完结篇
查看>>
Koa2初体验
查看>>
Koa 2 初体验(二)
查看>>
Koa2框架原理解析和实现
查看>>
vue源码系列文章good
查看>>
你不知道的Virtual DOM
查看>>
VUE面试题总结
查看>>
写好JavaScript条件语句的5条守则
查看>>
原生JS中DOM节点相关API合集
查看>>
【TINY4412】U-BOOT移植笔记:(7)SDRAM驱动
查看>>
【TINY4412】U-BOOT移植笔记:(12)BEEP驱动
查看>>
单链表的修改和删除
查看>>
C++的三个基本特征:封装、继承、多态
查看>>
C++虚函数的总结
查看>>
什么是URL地址?
查看>>
C++多态的实现方式总结
查看>>
学习C++需要注意的问题
查看>>
C++模板
查看>>
C++双冒号(::)的用法
查看>>
【Unity】封装SQLite管理类
查看>>