思路:
使用一个窗口框出子数组, 判断如果窗口内0的个数小于等于k,则右边界增加扩大窗口。
若窗口内0的个数大于k,则左边界增加减小窗口内数据。
每次记录窗口size,获取最大值。
代码
In [1]: def longest_sub_array_with_k_replace(array, k):
...: max_len = 0
...: left, right, end = 0, 0, len(array)
...: zero_count = 0
...:
...: while right <= end:
...: if zero_count <= k:
...: print(array[left:right])
...: max_len = max(max_len, len(array[left: right]))
...: try:
...: # 若新数据位置是0, zero_count +1
...: zero_count += (not array[right])
...: except IndexError:
...: pass
...: right += 1
...: else:
...: zero_count -= (not array[left])
...: left +=1
...:

该博客介绍了一种算法,用于找到一个数组中,允许替换最多k个0为1后,具有最长不同字符(在这里是0)的子数组的长度。算法通过滑动窗口实现,动态调整窗口大小,保持窗口内0的数量不超过k。最终返回的是最大子数组的长度。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



