一、题目
给定一个二进制数组 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位技术专家共同创作,文字、视频、音频交互阅读
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/124048108
内容来源于网络,如有侵权,请联系作者删除!