这是一个面试问题:
在0和1和1的排序字符串中,找到第一个出现的0。字符串将有一个' s然后是零' s
EG。
111110 , Return value:5
11100000 , Return value:3
11111111, Return value:-1
00000000, Return 0
基本方法:
有没有更好的解决方案,可能在O(1)中。
采访者提供了一个线索,即字符串可以转换为数字,然后可以完成一些日志操作,但我无法弄明白。
答案 0 :(得分:3)
如果日志操作是O(1),那么首先,我们可以反转数字加一,然后取日志基数2得到结果。
例如
1111110000000 - >反转 - > 0000001111111 - >加一 - > 0000010000000 - >记录基数2 - > 8
结果是8。
我们还可以创建一个2的幂映射来摆脱日志操作。
答案 1 :(得分:2)
有n + 1个不同的字符串和可能的结果,因此提供正确答案所需的信息量(即程序必须进行的最小测试次数)是O(ln n)。
中讨论的“查找第一位设置”问题的出现答案 2 :(得分:0)
一个0和1的排序字符串可以表示为2个计数 - 零个数和1个。
显然,通过这样的表示找到第一个零点的位置非常容易 - 它只是一个数量。