我有一个数组"0000011111"
我需要找到"1"
的第一次出现。
我怎样才能以有效的方式做到这一点?
我的解决方案是:(我认为有更好的方法)
$array = array(0,0,1,1,1);
for($i=0;$i<count($array);$i++)
{
if($array[$i] == 1)
{
var_dump($i);
return;
}
}
答案 0 :(得分:1)
您的解决方案已尽可能高效,但PHP中有built-in method可以为您执行此操作:
$array = array(0,0,1,1,1);
var_dump(array_search(1, $array)); // int(2)
请注意,array_search
将在数组中没有1的情况下返回布尔值FALSE
。
修改强>
我假设原始代码是PHP只是因为它看起来那样。 : - )
答案 1 :(得分:0)
不幸的是,由于没有必要将任何数字设为"1"
,并且由于您只需要通过一次数组,因此这是最有效的解决方案。二进制搜索或任何这样的算法都不会工作,因为这个数组显然没有排序
样本输入:
0101101
1000101
答案 2 :(得分:-2)
如果你能以某种方式有效地将数组转换为数字,则可以使用log base 2有效地找到前1个。
var number = 0b010000010;
console.log(Math.floor(Math.log2(number)))
&#13;
编辑执行此操作的主要原因是因为存在执行日志库2的硬件指令,使其保持恒定时间。
当然,如果你不能将你的数组存储为二进制字符串,因为它太长或类似的东西,这个解决方案不适合你。