📅  最后修改于: 2023-12-03 15:29:52.929000             🧑  作者: Mango
在一个已排序的二进制数组中,编写一个 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;
}