本文共 814 字,大约阅读时间需要 2 分钟。
这道题是窗口滑动类型的题目,使用双指针来解决。我们用left和right指针分别控制窗口的左右边界,窗口内最多允许K个0被翻转为1。目标是找到包含尽可能多1的子数组的长度。
我们希望找到能翻转成1的最大子数组长度,因此窗口必须动态调整。当遇到过多的0时,左指针移动以维持翻转的限制。具体来说:
这样持续处理,直到遍历结束,最大的窗口即为答案。
class Solution: def longestOnes(self, A: list[int], K: int) -> int: left = 0 right = 0 count = 0 n = len(A) for right in range(n): if A[right] == 0: count += 1 if count > K: if A[left] == 0: count -= 1 left += 1 return right - left + 1
这种方法确保了在O(n)时间复杂度内解决问题,适用于大量数据。
转载地址:http://hbagz.baihongyu.com/