[算法题] 获取一个二进制数据中最大的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   新西兰程序员  阅读(41)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示