LeetCode:485. Max Consecutive Ones

题目链接:

485. Max Consecutive Ones


题目描述:

Given a binary array, find the maximum number of consecutive 1s in this array.
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.


题目解释:

给定一个二进制数组,数组中存放的都是0,1两个整数,求 这个数组中连续整数1的长度。例如给定输入数组:[1,1,0,1,1,1],这个数组的最大连续1长度为3.数组中第一位和第二位为连续的两个1,第三位、第四位和第五位为连续的3个1,所以最大长度为3.


解题方案:

寻找最大连续1的长度,我们只要对数组遍历一边即可,在遍历过程中纪录当前连续块的长度,当碰见0中断连续时,终止计数,并与之前保存的连续块最大长度进行比较,保留最大连续长度。然后继续前行,当碰见1时再重新计数。这样到遍历完整个数组之后,变量中保留的就是最大连续长度。


AC代码:

class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {

      int len = nums.size();
      int pre_max = 0;

      for(int i = 0; i < len; ) {

        if(nums[i] == 1) {
          int max = 1;

          while(nums[++i] == 1) {
            max++;
          }
          if(max > pre_max) {
            pre_max = max;
          }
        } else {
          i++;
        }
      }
      return pre_max;
    }

};

此种解法的时间复杂度为O(N)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值