找到零数组中的第一个“1”

时间:2016-07-25 22:41:19

标签: arrays algorithm

我有一个数组"0000011111"

我需要找到"1"的第一次出现。

我怎样才能以有效的方式做到这一点?

我的解决方案是:(我认为有更好的方法)

$array = array(0,0,1,1,1);


for($i=0;$i<count($array);$i++)
{
    if($array[$i] == 1)
    {
        var_dump($i);
        return;
    }
}

3 个答案:

答案 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",并且由于您只需要通过一次数组,因此这是最有效的解决方案。二进制搜索或任何这样的算法都不会工作,因为这个数组显然没有排序 样本输入:

  1. 0101101
  2. 1000101
    在任何一种情况下,二进制搜索都不起作用。

答案 2 :(得分:-2)

如果你能以某种方式有效地将数组转换为数字,则可以使用log base 2有效地找到前1个。

&#13;
&#13;
var number = 0b010000010;
console.log(Math.floor(Math.log2(number)))
&#13;
&#13;
&#13;

编辑执行此操作的主要原因是因为存在执行日志库2的硬件指令,使其保持恒定时间。

当然,如果你不能将你的数组存储为二进制字符串,因为它太长或类似的东西,这个解决方案不适合你。