题目链接:
力扣https://leetcode-cn.com/problems/max-consecutive-ones-iii/
【分析】滑动窗口的应用题,这里维护滑动窗口大小的关键是k的大小,当k足够的时候,我们可以扩展right为0的右端点,否则我们需要缩短窗口,直到左端点能够释放出k来。
class Solution {
public int longestOnes(int[] nums, int k) {
int left = 0, right = 0, ans = 0, n = nums.length;
while(right < n){
if(nums[right] == 1){
right++;
}else{
if(k == 0){
while(left < n && nums[left] == 1) left++;
left++;
k++;
}
k--;
right++;
}
ans = Math.max(ans, right - left);
}
return Math.max(ans, right - left);
}
}
【Python版】
class Solution:
def longestOnes(self, nums: List[int], k: int) -> int:
n = len(nums)
left, right, ans = 0, 0, 0
while right < n:
if nums[right] == 1:
right += 1
else:
if k == 0:
while left < n and nums[left] == 1:
left += 1
left += 1
k += 1
k -= 1
right += 1
ans = max(ans, right - left)
return max(ans, right - left)