[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
};