给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:2
代码
//
// Created by mxz on 2022/12/4.
//
#include
#include
using namespace std;
class Solution {
public:
int findMaxConsecutiveOnes(vector<int> &nums) {
int s = nums.size();
int c = 0;
int r = 0;
for (int i = 0; i < s; ++i) {
if (nums[i] == 1) {
c++;
}
if (nums[i] == 0 || i == s - 1) {
r = max(c, r);
c = 0;
}
}
return r;
}
};
int main() {
Solution solution;
/// vector 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container),顺序序列,动态数组,能够感知内存分配器的(Allocator-aware)
/// vector list; vector list1 = list2, vector list2(list); vector list = {1, 2, 3};
/// vector list2(list.begin()+2,list.end()-1); vector list(7); vector list5(7, 3);
vector<int> vecTemp = {1, 1, 0, 1, 1, 1};
vector<int> list2(vecTemp.begin() + 2, vecTemp.end() - 1);
vector<int>::iterator it;
for (it = list2.begin(); it != list2.end(); it++) {
cout << *it << endl;
}
for (int i = 0; i < list2.size(); ++i) {
}
cout << solution.findMaxConsecutiveOnes(list2) << endl;
return 0;
}
0
1
1
2
时间复杂度 O(n) n 为数组长度, 空间复杂度为 O(1)。
代码
int findMaxConsecutiveOnes(vector<int> &nums) {
int first = 0, second = 0, ans = 0, flag = 0;
/// 0, 1, 1, 0
while (second < nums.size()) {
if (nums[second] == 1 && flag == 0) {
first = second;
flag = 1;
} else if (nums[second] == 0 && flag) {
ans = max(ans, second - first);
flag = 0;
}
second++;
}
if (nums[first] == 1 && flag) {
ans = max(ans, second - first);
}
return ans;
}
时间复杂度 O(n) n 为数组长度, 空间复杂度为 O(1)。
项目地址:
https://gitee.com/codingce/codingce-leetcode
https://github.com/xzMhehe/codingce-leetcode