⭐每日一题⭐专栏
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)空间)
- 使用
start
、end
记录当前连续 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; } };
|