题目描述:
给定一个由若干0和1组成的数组A,我们最多可以将K个值从0变成1.
返回仅包含1的最长(连续)子数组的长度。
示例:
输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释:
[1,1,1,0,0,1,1,1,1,1,1]
粗体红色数字从 0 翻转到 1,最长的子数组长度为 6。
题解:
利用滑动窗口来实现:
设置左指针和右指针,统计右指针和左指针区间内0的个数;
如果小于等于K则向前移动右指针;
如果超过K,则向前移动左指针至到满足小于等于K;
统计可取最大的左右指针范围就是最长的子数组长度。
实现:
class Solution:
def longestOnes(self, A: List[int], K: int) -> int:
left_index=0
right_index=0
max_list_len=0
for right_index in range(len(A)):
while right_index-left_index+1-sum(A[left_index:right_index+1])>K:
left_index=left_index+1
max_list_len