📌  相关文章
📜  Python程序计算排序二进制数组中的1

📅  最后修改于: 2022-05-13 01:54:31.608000             🧑  作者: Mango

Python程序计算排序二进制数组中的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 作为计数。
以下是上述思想的实现。

Python
# Python program to count one's in a boolean array
  
# Returns counts of 1's in arr[low..high].  The array is
# assumed to be sorted in non-increasing order
def countOnes(arr,low,high):
      
    if high>=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=[1, 1, 1, 1, 0, 0, 0]
print ("Count of 1's in given array is",countOnes(arr, 0 , len(arr)-1))
  
# This code is contributed by __Devesh Agrawal__


输出
Count of 1's in given array is 4

上述解决方案的时间复杂度为 O(Logn)

空间复杂度 o(log n) (函数调用栈)

有关详细信息,请参阅有关排序二进制数组中计数 1 的完整文章!