数组中存放0到n中的缺少一个数的连续数,找出该缺少的数

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

数组中存放0到n中的缺少一个数的连续数,找出该缺少的数_第1张图片数组中存放0到n中的缺少一个数的连续数,找出该缺少的数_第2张图片数组中存放0到n中的缺少一个数的连续数,找出该缺少的数_第3张图片数组中存放0到n中的缺少一个数的连续数,找出该缺少的数_第4张图片

最低有效位(Least Significant Bit)代表二进制数中的最小的单位,可以用来指示数字很小的变化。也就是说,LSB是一个二进制数字中的第0位(即最低位),具有权值为2^0,可以用它来检测数的奇偶性。在大端序中,lsb指最右边的位。

   最高有效位the Most Significant Bitmsb),是指一个n位二进制数字中的n-1位,具有最高的权值2^n − 1。与之相反的称之为最低有效位。在大端序中,msb即指最左端的位。对于有符号二进制数,负数采用反码或补码形式,此时msb用来表示符号,msb为1表示负数,0表示正数。

   注意:

    (1)MSB(全大写)有时也指the Most Significant Byte,指多字节序列中具有最大权重的字节。

     (2)LSB(全大写)有时也指Least Significant Byte,指多字节序列中最小权重的字节。

 

public int findMissing(ArrayList array)
{
/*
bit 0对应于LSB.以此为起点,逐步向较高的位推进
*/
return findMissing(array,0);
}
public int findMissing(ArrayList input,int column)
{
if(column>=BitInteger.INTEGER_SIZE)//终止条件或错误条件
{
return 0;
}
ArrayList oneBits=new ArrayList(input.size()/2);
ArrayList zeroBits=new ArrayList(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;
}
}

转载于:https://my.oschina.net/u/2822116/blog/790673

你可能感兴趣的:(数组中存放0到n中的缺少一个数的连续数,找出该缺少的数)