动态调整滑动窗口的size
class Solution {
public:
int longestSubarray(vector<int>& nums) {
// 扩大:当此时元素为1,或为0但未删除元素,移动j
// 缩小:当此时元素为0,但已删除元素,移动i,若i==j,同时移动i和j
int n = nums.size();
int k = 1;
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 (nums[i] == 0) {
k++;
}
if (i == j) {
j++;
}
i++;
}
res = max(res, j - i - 1);
}
return res;
}
};