在1&0; s和0' s的字符串中查找第一个出现的0

时间:2015-12-24 13:45:33

标签: algorithm search

这是一个面试问题:

在0和1和1的排序字符串中,找到第一个出现的0。字符串将有一个' s然后是零' s

EG。

111110  , Return value:5  
11100000 , Return value:3  
11111111, Return value:-1  
00000000, Return 0  

基本方法:

  • 线性搜索:O(n)
  • 二进制搜索以查找第一个出现的0:O(logn)

有没有更好的解决方案,可能在O(1)中。

采访者提供了一个线索,即字符串可以转换为数字,然后可以完成一些日志操作,但我无法弄明白。

3 个答案:

答案 0 :(得分:3)

如果日志操作是O(1),那么首先,我们可以反转数字加一,然后取日志基数2得到结果。

例如

  

1111110000000 - >反转 - > 0000001111111 - >加一 - > 0000010000000 - >记录基数2 - > 8

结果是8。

我们还可以创建一个2的幂映射来摆脱日志操作。

答案 1 :(得分:2)

有n + 1个不同的字符串和可能的结果,因此提供正确答案所需的信息量(即程序必须进行的最小测试次数)是O(ln n)。

这是https://en.wikipedia.org/wiki/Find_first_set

中讨论的“查找第一位设置”问题的出现

答案 2 :(得分:0)

一个0和1的排序字符串可以表示为2个计数 - 零个数和1个。

显然,通过这样的表示找到第一个零点的位置非常容易 - 它只是一个数量。