题目解析
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;}
};}