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
Was this helpful?