楼主:
yam276 ('_')
2025-06-09 17:43:251004. Max Consecutive Ones III
题目:
一个都是 0, 1 的阵列
你可以把最多 k 个 0 翻成 1 (k 不是长度)
求最大连续为 1 的子阵列大小
思路:
这题有双指标又有滑动窗口
我们需要 左右指标 窗口内零个数 最大连续1个数 共四个
那双指标都 0 起手 右指标一直滑 碰到 0 就纪录
如果 0 总数 > k 代表要缩圈
缩圈是 left 一直 +1 碰到 0 就减 count 直到 count <= k
最后每轮都记录 因为如果一直翻 1 就需要一直纪录
Code:
impl Solution {
pub fn longest_ones(nums: Vec<i32>, k: i32) -> i32 {
let mut left = 0;
let mut right = 0;
let mut zero_count = 0;
let mut max_len = 0;
while right < nums.len() {
if nums[right] == 0 {
zero_count += 1;
while zero_count > k {
if nums[left] == 0 {
zero_count -= 1;
}
left += 1;
}
}
max_len = max_len.max(right - left + 1);
right += 1;
}
max_len as i32
}
}
不刷了 刷到饿了