题目解析
1004. 最大连续1的个数 III
按照k的数值将0反转成1,记录数组中连续1的最长个数
算法讲解
我们需要一个变量temp记录翻转的次数,每遇到一次0,temp++。当temp > k的时候此时说明翻转0已经到达极限,已经不可以在翻转了,所以此时就需要将左窗口往前移动:移动的要求也就是当左窗口当前的数值 == 0的时候,我们让temp--,上面的操作都在一个循环判断中,当循环判断移动左窗口的时候,temp < k此时就可以让右边窗口移动,继续翻转0
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int ret = INT_MIN;
int left = 0, right = 0;
int n = nums.size();
int temp = 0;
while(right < n)
{
if(nums[right] == 0)temp++;
while(temp > k)
{
//走到这里 说明已经翻转最大程度了
if(nums[left] == 0)temp--;
left++;
}
ret = max(ret, right - left + 1);
right++;
}
return ret;
}
};
}