1004. 最大连续1的个数 III

61 阅读1分钟
[1004. 最大连续1的个数 III](https://leetcode.cn/problems/max-consecutive-ones-iii/)


给定一个二进制数组 `nums` 和一个整数 `k`,如果可以翻转最多 `k` 个 `0` ,则返回 *数组中连续 `1` 的最大个数* 。

示例 1:

输入: nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2 输出: 6 解释: [1,1,1,0,0,1,1,1,1,1,1] 粗体数字从 0 翻转到 1,最长的子数组长度为 6。

示例 2:


输入: nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出: 10
解释: [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

思路

首先这个题目,遇到求解特殊子序列,或者长度的,用滑动窗口,右侧扩张,左侧看情况 那么内部要用循环,一步步缩窄.

代码

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var longestOnes = function (nums, k) {
  let left = 0;
  let count = 0;
  let max = 0
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] === 0) {
      count++
      while (count > k) {
        if (nums[left] === 0) {
          count--
        }
        left++
      }
    }
    max = Math.max(max, i - left + 1)
  }

  return max
};