GFG App
Open App
Browser
Continue

# Php Program to Count 1’s in a sorted binary array

Given a binary array sorted in non-increasing order, count the number of 1’s in it.

Examples:

```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```

A simple solution is to linearly traverse the array. The time complexity of the simple solution is O(n). We can use Binary Search to find count in O(Logn) time. The idea is to look for last occurrence of 1 using Binary Search. Once we find the index last occurrence, we return index + 1 as count.
The following is the implementation of above idea.

## 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. ` `?> `

Output

`Count of 1's in given array is 4`

Time complexity of the above solution is O(Logn)

Space complexity o(log n) (function call stack)

Please refer complete article on Count 1’s in a sorted binary array for more details!

My Personal Notes arrow_drop_up