Php程序计算排序二进制数组中的1
给定一个按非递增顺序排序的二进制数组,计算其中 1 的个数。
例子:
Input: arr[] = {1, 1, 0, 0, 0, 0, 0}
Output: 2
Input: arr[] = {1, 1, 1, 1, 1, 1, 1}
Output: 7
Input: arr[] = {0, 0, 0, 0, 0, 0, 0}
Output: 0
一个简单的解决方案是线性遍历数组。简单解的时间复杂度为 O(n)。我们可以使用二分搜索在 O(Logn) 时间内找到计数。这个想法是使用二分搜索查找 1 的最后一次出现。一旦我们找到最后一次出现的索引,我们就返回 index + 1 作为计数。
以下是上述思想的实现。
PHP
= $low)
{
// get the middle index
$mid = $low + ($high - $low)/2;
// check if the element at middle
// index is last 1
if ( ($mid == $high or $arr[$mid+1] == 0)
and ($arr[$mid] == 1))
return $mid+1;
// If element is not last 1, recur for
// right side
if ($arr[$mid] == 1)
return countOnes($arr, ($mid + 1),
$high);
// else recur for left side
return countOnes($arr, $low, ($mid -1));
}
return 0;
}
/* Driver code */
$arr = array(1, 1, 1, 1, 0, 0, 0);
$n = count($arr);
echo "Count of 1's in given array is " ,
countOnes($arr, 0, $n-1);
// This code is contributed by anuj_67.
?>
输出
Count of 1's in given array is 4
上述解决方案的时间复杂度为 O(Logn)
空间复杂度 o(log n) (函数调用栈)
有关详细信息,请参阅有关排序二进制数组中计数 1 的完整文章!