1004. Max Consecutive Ones III

https://leetcode.com/problems/max-consecutive-ones-iii/

由0和1组成的数组,能选择K个0变为1,问选择后整个数组中最长连续1能有多长。子数组+max size => 动态窗口或DP。以nums[r]为底的连续为1的子数组改变K个看最长能有多少。当nums[r]为0时,要耗费1个单位0变1,当改变的数字已经达到K时,把l不断前移到当前窗口内第一个0后。

/*
 * @lc app=leetcode id=1004 lang=cpp
 *
 * [1004] Max Consecutive Ones III
 */

// @lc code=start
class Solution {
public:
    int longestOnes(vector<int>& A, int K) {
        int res = 0;
       for (int l = 0, r = 0, cnt = 0; r < A.size(); ++r) {
           if (A[r] == 0) ++cnt;
           while (cnt > K) {
               if (A[l] == 0) --cnt;
               ++l;
           }
           res = max(res, r - l + 1);
       } 
       return res;
    }
};
// @lc code=end

Last updated