【leetcode】1004. 最大连续1的个数 III
题目
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
思路
滑动窗口肯定,类似 567. 字符串的排列
维护滑动窗口内部有效的元素个数,满足一定的规则
代码
class Solution {
public:
int longestOnes(vector<int>& A, int K) {
int ans = 0;
for (int l = 0, r = 0, cnt = 0; r < A.size(); r++) {
if (A[r] == 1) ++cnt;
while (r - l + 1 - cnt > K) if (A[l++] == 1) --cnt;
ans = max(ans, r - l + 1);
}
return ans;
}
};
这是 567. 字符串的排列 的代码
class Solution {
public:
bool checkInclusion(string t, string s) {
int count[128] = { 0 };
for (char c : t) count[c]++;
for (int l = 0, r = 0, len = 0; r < s.size(); r++) {
if (--count[s[r]] >= 0) ++len;
while (r - l + 1 > len && ++ count[s[l++]] > 0) --len;
if (len == t.size()) return true;
}
return false;
}
};
总结
都是定义了一个count 来维护滑动窗口内部的有效的长度,
根据题意去维护滑动窗口的大小。