LeetCode 1004. 最大连续1的个数 III

最大连续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));
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值