最大连续1的个数 III
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-consecutive-ones-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
双指针或者说是滑动窗口
// 双指针
use std::cmp;
fn longest_ones(a: Vec<i32>, k: i32) -> i32 {
let mut left:usize = 0;
let mut right:usize = 0;
let mut max_len = 0;
let mut zero_cnt = 0;
while right < a.len(){
if a[right] == 0 {
zero_cnt += 1;
}
right += 1;
if zero_cnt > k {
// 移动左指针
while left < right && zero_cnt > k {
if a[left] == 0 {
zero_cnt -= 1;
}
left += 1;
}
}
// 更新当前长度
max_len = cmp::max(right - left, max_len);
println!("left:{}\t\tright:{}\t\tcurr:{}\t\tmax:{}, zore_cnt:{}", left, right, right - left, max_len, zero_cnt);
}
return max_len as i32;
}
fn main () {
let nums = vec![1, 1 , 1 , 1];
let k = 0;
print!("result is {}", longest_ones(nums, k));
}