剑指Offer —— 找出数组中两个只出现了一次的数字
2016-04-07 11:17
441 查看
主要思路是:通过异或操作,消除数组中相同的两个数,结果等于不同的两个数的异或,然后找到异或结果中从右往左第一个是1的是第n位,将数组按照第n位是否为1分为两组,分别组内异或,异或的结果几位只出现了一次的那个数。
vs2015中调试运行通过
#include "stdafx.h"
#include<iostream>
using namespace std;
unsigned int FindFirstBitIs1(int num)
{
unsigned int index = 0;
while (((num & 1) == 0) && index < 8 * sizeof(int))
{
num = num >> 1;
++index;
}
return index;
}
bool IsBit1(int num, unsigned int index)
{
num = num >> index;
return (num & 1);
}
void FindNumsAppearOnce(int data[], int len, int *num1, int *num2)
{
if ((NULL == data) || (len < 2))
return;
int resultExclusiveOR = 0;
for (int i = 0; i < len; ++i)
{
resultExclusiveOR ^= data[i];
}
unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR);
*num1 = 0;
*num2 = 0;
for (int j = 0; j < len; ++j)
{
if (IsBit1(data[j], indexOf1))
{
*num1 ^= data[j];
}
else
{
*num2 ^= data[j];
}
}
}
int main()
{
const int length = 10;
int data[length];
int a = 0;
int b = 0;
for (int i = 0; i < length; i++)
{
cin >> data[i];
}
FindNumsAppearOnce(data, length, &a, &b);
printf("a is %d, b is %d",a,b);
while (1);
return 0;
}
vs2015中调试运行通过
#include "stdafx.h"
#include<iostream>
using namespace std;
unsigned int FindFirstBitIs1(int num)
{
unsigned int index = 0;
while (((num & 1) == 0) && index < 8 * sizeof(int))
{
num = num >> 1;
++index;
}
return index;
}
bool IsBit1(int num, unsigned int index)
{
num = num >> index;
return (num & 1);
}
void FindNumsAppearOnce(int data[], int len, int *num1, int *num2)
{
if ((NULL == data) || (len < 2))
return;
int resultExclusiveOR = 0;
for (int i = 0; i < len; ++i)
{
resultExclusiveOR ^= data[i];
}
unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR);
*num1 = 0;
*num2 = 0;
for (int j = 0; j < len; ++j)
{
if (IsBit1(data[j], indexOf1))
{
*num1 ^= data[j];
}
else
{
*num2 ^= data[j];
}
}
}
int main()
{
const int length = 10;
int data[length];
int a = 0;
int b = 0;
for (int i = 0; i < length; i++)
{
cin >> data[i];
}
FindNumsAppearOnce(data, length, &a, &b);
printf("a is %d, b is %d",a,b);
while (1);
return 0;
}
相关文章推荐
- js 将json字符串转换为json对象的方法解析
- node.js系统找不到指定文件报错
- RapidJson读取json文档
- nw.js node-webkit系列(20)拖动文件到页面并读取文件信息
- [转] json in javascript
- CSS引用方式
- 237. Delete Node in a Linked List
- JQuery中animate的一些坑
- CSS中盒子的浮动定位
- jquery-pjax遇到的坑
- Javascript的this用法
- 【剑指offer系列】 斐波那契数列___9
- Caffe使用step by step:faster-rcnn目标检测matlab代码
- Gson转换json串到Map,Key值是String还是设定值(如Long)?
- nodejs小记之formidable同步图片文件上传
- js长轮询与短轮询的简单理解
- html canvas 自适应
- jQuery插件开发精品教程,让你的jQuery提升一个台阶
- node基础再现--module.exports 和exports
- CSS 的命名和书写