c++ - 连续位的长度 1 流后跟 0

标签 c++ c algorithm data-structures

是面试问题,所以寻找可能不是显而易见的解决方案。

假设有 1111...111100000...000 的大流

找到 1 的长度(数字)。

您可以假设这里的 1 是一个设置位。

如果 1 是符号,它将如何变化,比如 aaa..aaaabbbb...bbbbb

我可以提出的一个解决方案是查看第一个位/符号,然后继续将间隔加倍,然后查看第 3 个,然后第 7 个,依此类推。当你击中 0 或其他符号时,然后再次使用分而治之的方式回到最后一个位置。

最佳答案

如果您可以随机访问流并且流的长度已知,则可以使用 O(log n) 中的二进制搜索变体来实现。

或者,您可以使用 0x1 &,如果为零,则递增计数器并右移 1。或者,您可以检查整个字节(字、双字、四字等)是否非零以更快地找到那些开始的街区。无论哪种方式,都是 O(n)。

关于c++ - 连续位的长度 1 流后跟 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999249/

相关文章:

php - 使用特定要求重新排序数组

c++ - 无法对包含字符串 C++ 的结构数组进行操作

c++ - CUDA:查明主机缓冲区是否已固定(页面锁定)

抽象类的C++工厂方法模式

c - 合并排序SEGV,数组指针消失?

python - 刷新 C 嵌入式 python 中的导入

c++ - 为什么 operator () [] -> = 必须是非静态成员?

c - 为什么没有参数的函数(与实际函数定义相比)可以编译?

c++ - 算法优化

algorithm - 检测调度程序时间轴上的冲突(算法)