1004. 最大连续1的个数 III #
- 标签:双指针、滑动窗口
- 难度:中等
题目大意 #
描述:给定一个由 0
、1
组成的数组 nums
,再给定一个整数 k
。最多可以将 k
个值从 0
变到 1
。
要求:返回仅包含 1
的最长连续子数组的长度。
说明:
- $1 \le nums.length \le 10^5$。
nums[i]
不是0
就是1
。- $0 \le k \le nums.length$。
示例:
- 示例 1:
|
|
解题思路 #
思路 1:滑动窗口(不定长度) #
- 使用两个指针
left
、right
指向数组开始位置。使用max_count
来维护仅包含1
的最长连续子数组的长度。 - 不断右移
right
指针,扩大滑动窗口范围,并统计窗口内0
元素的个数。 - 直到
0
元素的个数超过k
时将left
右移,缩小滑动窗口范围,并减小0
元素的个数,同时维护max_count
。 - 最后输出最长连续子数组的长度
max_count
。
思路 1:代码 #
|
|
思路 1:复杂度分析 #
- 时间复杂度:$O(n)$。
- 空间复杂度:$O(1)$。