题目描述
给定一个二进制数组, 计算其中最大连续 1 的个数。
示例:
输入:[1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-consecutive-ones
顺序循环解法1
1.按个遍历数组每个元素,若是1则len++,否则len=0
2.记录中间最大1的长度
3.如果当前长度超过最大长度,那么更新maxlen
不足之处
1.判断是否大于最长长度的地方,判断不好,每次都要判断
int findMaxConsecutiveOnes(vector<int>& nums) {
int len = 0;
int maxlen = 0;
for(int i = 0; i < nums.size(); i++) {
if(nums[i]) {
len++;
//这里判断不好,因为每次循环都要判断,浪费时间
if(len > maxlen) {
maxlen = len;
}
} else {
len = 0;
}
}
return maxlen;
}
顺序循环解法1优化
1.改进判断最大长度的位置
2.若是当前为0,则先判断当前1的长度是否大于maxlen,如果大于则maxlen=len
并清空len=0
3.这里处理边界情况,当最后一个为1时,需要在循环外判断是否大于maxlen
int findMaxConsecutiveOnes(vector<int>& nums) {
int len = 0;
int maxlen = 0;
for(int i = 0; i < nums.size(); i++) {
if(nums[i]) {
len++;
} else {
maxlen = max(len, maxlen);
len = 0;
}
}
//这里,最后有可能是1,若果是1,则返回这两个的最大值
return max(maxlen, len);
}
int main() {
vector<int> arr = { 1, 1, 0, 1, 1, 1};
int len = findMaxConsecutiveOnes(arr);
cout << len << endl;
return 0;
}