public int findMissing(ArrayList<BitInteger> array)
{
/*
bit 0对应于LSB.以此为起点,逐步向较高的位推进
*/
return findMissing(array,0);
}
public int findMissing(ArrayList<BitInteger> input,int column)
{
if(column>=BitInteger.INTEGER_SIZE)//终止条件或错误条件
{
return 0;
}
ArrayList<BitInteger> oneBits=new ArrayList<BitInteger>(input.size()/2);
ArrayList<BitInteger> zeroBits=new ArrayList<BitInteger>(input.size()/2);
for(BitInteger t:input)
{
if(t.fetch(column)==0)
{
zeroBits.add(t);
}
else
{
oneBits.add(t);
}
}
if(zeroBit.size()<=oneBits.size())
{
int v=findMissing(zeroBits,column+1);
return (v<<1)|0;
}
else
{
int v=findMissing(oneBits,column+1);
return (v<<1)|1;
}
}