c – 连续位1的流长度,后跟0

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

说1111 … 111100000 … 000大流

找到长度(数量)为1.

你可以假设这里1是一个Set Bit.

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

我可以提出的一个解决方案是看第1位/符号,然后保持加倍间隔,然后看第3,然后第7,依此类推.当你击中0或其他符号时,然后再次使用分而治之,向后移动到最后位置.

最佳答案
如果您可以随机访问流并且已知流的长度,则可以使用O(log n)中的二进制搜索变体来执行此操作.

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

转载注明原文:c – 连续位1的流长度,后跟0 - 代码日志