[算法题] 获取一个二进制数据中最大的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;

         }

 

        

    }

 

posted on 2023-02-15 12:06  新西兰程序员  阅读(37)  评论(0编辑  收藏  举报