[算法题] 获取一个二进制数据中最大的binary gap
有一个算法题是这样的,有一个整数N, 把它转换为二进制后,我们要获取它的二进制数据中,最大的连续0的个数
比如 N =1041 对应二进制为 10000010001 => 在第一个1和第二个1之间,有5个连续的0; 在第二个1和第三个1之间,有3个连续的0 => 所以最大的连续是 5
比如 N = 32, 对应二进制为 100000 => 显然不存在二个1之间的0,所有是0, no binary gap
解题思路:
1. 把整数N 转换为二进制 Convert.ToString(N,2);
2. 把二进制中所有的1所在的index放入一个新的数组 indexArray[]
3. 如果 indexArray < 2 返回0
否则,循环indexArray, 用后面一个值减去前面一个值, 得到差值diffValue,找出最大的diffValue
var maxValue = 0;
for(int i = 0; i < indexArray.Length - 1; i++)
{
int diffValue = indexArray[i + 1] - indexArray[i] - 1; (比如10000010001 位置0和位置6之间有5个0 所以是 6 - 0 - 1)
if(diffValue > maxValue)
{
maxValue = diffValue;
}
}