您的位置:首页 > 其它

对查找连续数段中缺失的一个数的想法

2008-11-11 12:26 399 查看
有一段数段,MIN到MAX,存储顺序为无序,但是其中缺失了一个数,如何查找出这个数呢?

可以用标志位的方法,但个人觉得这个方法不是很好

然后我就想到了XOR运算

XOR运算有个特点,凡是从偶数开始的连续4个数进行XOR运算后结果为0,那么,如果其中缺失一个数的话,XOR结果就应 该是这个数。XOR运算具有可交换性质。那么我就可以利用这一点,将数段扩充为4的倍数,使得数段中全是4个一段4个一段的。那么对这些数进行XOR运算后就可以得到那个缺失的数了。

伪代码如下:

const int MAX = 上限;
const int MIN = 下限;
int iResult = MAX + (4 - (MAX % 4));//结果
int Array[MAX-MIN] = {MIN到MAX的无序数集,缺一个};
//上限扩充
for(int i=(4 - (MAX % 4)); i>0; --i)
{
iResult ^= MAX + i;
}
//下限扩充
for(int j=(MIN % 4); j>0; --j)
{
iResult ^= MIN - j;
}
//求出结果
for(int ix=0; ix<(MAX-MIN); ++ix)
{
iResult ^= Array[ix];
}
iResult就是缺失那个数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐