leetcode刷题(第1004题)——最大连续1的个数 III

x33g5p2x  于2022-04-10 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(352)

一、题目

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数
组中连续 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。
输入: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 right = 0
    let maxLen = k
    let zeroNum = 0
    let len = nums.length
    while(right <= len) {
        maxLen = Math.max(maxLen, right - left)
        if(nums[right] === 0) {
            zeroNum++
        }
        while(zeroNum > k) {
            if(nums[left] === 0) {
                zeroNum--
            }
            left++
        }
        right++
    }
    return maxLen
};
//[1,1,1,0,0,0,1,1,1,1,0]

五、总结

《新程序员》:云原生和全面数字化实践

50位技术专家共同创作,文字、视频、音频交互阅读

相关文章