[算法题] 获取一个二进制数据中最大的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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律