⭐每日一题⭐专栏

written by SJTU-XHW

本人学识有限,解析难免有错,恳请读者能够批评指正,本人将不胜感激!


Leetcode 485. 最大连续 1 的个数

题干

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例

示例 1:

1
2
3
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2:

1
2
输入:nums = [1,0,1,1,0,1]
输出:2

思路

借鉴最大连续子序列和的问题的解决方案(O(n)时间、O(1)空间)

  • 使用 startend 记录当前连续 1 序列两端下标值,maxLen 记录到目前为止最长的 1 子序列长度;
  • 从前向后读数组,一旦读到:当前是 1,上一个是 0 的单元(包含开头),则立即更新当前连续子序列的开头;一旦读到当前是 1 的单元则立刻更新连续子序列的末尾(毕竟一旦有就是末尾);
  • 在每一次一旦修改了开头或结尾下标值的时候,都更新最长子序列长度值;

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int maxLen = 0, start = 0, end = 0, len = nums.size();
for (int i = 0; i < len; ++i) {
if (nums[i]) {
if (i == 0 || nums[i - 1] == 0) start = i;
end = i;
if (maxLen < end - start + 1) maxLen = end - start + 1;
}
}
return maxLen;
}
};

评论
昼夜切换阅读模式