LeetCode485.Max Consecutive Ones题解

本学期算法课需要每周做几道leetcode的算法题,再写成题解贴到博客上面。先从几道简单的开始练练手,毕竟大三之后几乎都在做project,很少做算法题了。

1. 题目描述

Given a binary array, find the maximum number of consecutive 1s in this array.

2. 样例
Input: [1,1,0,1,1,1]
Output: 3
Explanation: The first two digits or the last three digits are consecutive 1s.
The maximum number of consecutive 1s is 3.
3. 注意事项

所有的数组仅仅是0和1组成,数组的长度是正整数,并且不会超过10000.

4. 分析

题目的意思很容易理解,给出一个由0和1任意组成的数组,需要我们找到连续的几个元素都是1的情况,把最长的结果输出出来。
思路也很容易想:设置两个计数器current_counter和max_counter,前者用来记录当前连续出现1的数目,后者用来记录目前为止最大的连续出现1的数目
接着从数组的第一位开始进行遍历,判断当前的元素以及下一个是否为1,满足此条件则current_counter加1,否则则说明中间出现了0作为阻隔,1的出现不连续了。我们认为current_counter暂时完成了它的使命,将其与max_counter比较,大于max_counter的值则赋值给它,即我们的目的是每次出现连续个1的时候,我们会让max_counter记录最大的连续1的数目。
最后结束的时候,需要判断一下特殊的边界条件,例如只有一个元素为1的数组和只有一个元素为0的数组该如何处理。
这里写图片描述

5. 源码
class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
        int i;
        int current_counter = 1;
        int max_counter = 0;
        int length = nums.size();
        for (i = 0; i < length; i++) {
            if (nums[i] == nums[i+1] && nums[i] == 1) {
                current_counter++;
            }
            else {
                if (current_counter > max_counter && nums[i] == 1) {
                    max_counter = current_counter;
                }
                current_counter = 1;
            }
        }
        if (length == 1 && nums[0] == 0) {
            max_counter = 0;
        }
        return max_counter;
    }
};
6. 心得

本题不难,拿来做恢复性训练比较好。注意一下边界情况的讨论即可,尤其是不要看错题,比如笔者第一次当成了需要输出0或者1的连续出现最多的情况,提交了多次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值