设计一种可以确定缺失整数的分而治之算法

时间:2011-02-03 21:38:37

标签: algorithm

给定一个数组,A,按某种顺序包含除了一个k位非负整数外的所有数据,找到具有以下约束的缺失整数:

您只能使用其中一个整数执行两项操作:

  1. 获取第i位的值
  2. 在阵列中互相交换
  3. 例如:如果k为3,则数组将包含除0到7之外的所有整数,其任务是找到缺少的整数。

3 个答案:

答案 0 :(得分:3)

提示:你能看出丢失的号码是偶数还是奇数?

答案 1 :(得分:3)

您应检查每个位(例如,如果k = 3,您需要检查所有3位)是否存在2 ^ k-1次为0& 1。

如果您确定所列出的列表的不变量(只有一个数字丢失并且没有重复) - 确保它始终保持 - 那么您只需检查一个,任意位保持上面列出的条件

例如,假设不变量成立,k = 3,你有列表[0-7],不包括6。 对于列表中的每个数字,获取其第一位(最不重要)并执行以下操作:

if bit value = 0 then zeroValues++;
if bit value = 1 then oneValues++;

zeroValues应该等于oneValues,两者都应该等于2^k-1,在这种情况下为4。

修改:重新阅读您的问题,您正在寻找整个号码。为了找到您要查找的整个整数值,只需执行所有位的过程。对于每个位,您将找到0值或1个值丢失。缺失值是结果整数中的位值。对所有位执行此操作将找到整数的整个位表示。

答案 2 :(得分:1)

有关完全不同方法的提示,您可以对数组进行排序吗?