📜  C++ 程序在已排序的二进制数组中计数 1(1)

📅  最后修改于: 2023-12-03 15:29:52.929000             🧑  作者: Mango

C++ 程序在已排序的二进制数组中计数 1

在一个已排序的二进制数组中,编写一个 C++ 程序,它可以计算出该数组中 1 的个数。

算法分析

我们可以使用二分搜索来寻找第一个值为 1 的元素的下标,然后从这个下标开始一次逐个遍历整个数组,计算出总共有多少个值为 1 的元素。

具体来说,我们可以使用 lower_bound 函数来找到第一个值为 1 的元素的下标。

int countOnes(vector<int>& nums) {
    auto it = lower_bound(nums.begin(), nums.end(), 1);
    int count = 0;
    for (auto i = it; i != nums.end(); i++) {
        if (*i == 1) {
            count++;
        } else {
            break;
        }
    }
    return count;
}

这个算法的时间复杂度是 $O(\log n + m)$,其中 $n$ 是数组中元素的个数,$m$ 是值为 1 的元素的个数。

示例代码

完整的示例代码如下:

#include <vector>
#include <algorithm>

using namespace std;

int countOnes(vector<int>& nums) {
    auto it = lower_bound(nums.begin(), nums.end(), 1);
    int count = 0;
    for (auto i = it; i != nums.end(); i++) {
        if (*i == 1) {
            count++;
        } else {
            break;
        }
    }
    return count;
}