2022.6.21今天你刷题了吗?
题目:
给定一个二进制数组 nums
, 计算其中最大连续 1
的个数。
分析:
给定一个数组,找出里面最多连续1的个数,然后求出这几个1的和。
思路:遍历数组元素,如果为1则一直++,触发遇到两种情况
1.碰到元素为0的元素,此时求出值,进行下一轮
2.碰到数组边界,此时求出值,结束循环
所以外面利用两个指针,一个指向开头,一个指向最后一个元素(该指针用来移动)。求值的时候就利用两个指针下标做减,当遇到一次连续1时,进入下一次连续1,我们更新左指针,重新开始
PS:该代码运行时间超过了官方,超过了官方,超过了官方
解析:
1.双指针
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int left = 0;
int right = 0;
int res = 0;
for (int i = 0; i < nums.size(); i++)
{
if (nums[i])
{
right++;
//触碰边界
if (i == nums.size() - 1)
{
res = max(res, right - left);
}
}
else
{
//触碰到0
res = max(res, right - left);
left=right;
}
}
return res;
}
};