动态调整滑动窗口的size
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
// 扩大:当此时元素为1,或为0且k>0 -> 移动j
// 缩小:当此时元素为0,且k==0 -> 移动i,若i==j,同时移动i和j
int n = nums.size();
int origin = k;
int i = 0, j = 0;
int res = 0;
while ( i <= j && j < n) {
// 扩大
if (nums[j] == 1 || (nums[j] == 0 && k > 0)) {
if (nums[j] == 0) {
k--;
}
j++;
}
// 缩小
else {
if (origin != 0 && nums[i] == 0) {
k++;
}
if (i == j) {
i++;
j++;
} else {
i++;
}
}
res = max(res, j - i);
}
return res;
}
};