1004. 最大連續1的個數 III - 力扣(LeetCode)
使用滑動窗口的方法來解決這個問題。
思路:
- 使用雙指針(滑動窗口),定義左右邊界
left
和right
。 - 維護窗口內最多包含
k
個 0。 - 當窗口內的 0 超過
k
個時,移動left
指針,縮小窗口,直到窗口內的 0 個數滿足條件。 - 計算窗口的最大寬度,即最長連續 1 的個數。
代碼:
def longestOnes(nums, k):left = 0max_length = 0zero_count = 0for right in range(len(nums)):if nums[right] == 0:zero_count += 1while zero_count > k:if nums[left] == 0:zero_count -= 1left += 1max_length = max(max_length, right - left + 1)return max_length
復雜度分析:
- 時間復雜度:O(n),其中 nn 是數組的長度,每個元素最多被訪問兩次(一次由
right
訪問,一次由left
訪問)。 - 空間復雜度:O(1),僅使用了有限的額外變量。
示例:
nums = [1,1,0,0,1,1,1,0,1,1,0,1]
k = 2
print(longestOnes(nums, k)) # 輸出 8
這個方法通過滑動窗口高效地找到最長的連續 1 的子數組,適用于大規模數據。