1004. 最大连续1的个数 III-滑动窗口双指针
Posted hequnwang10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1004. 最大连续1的个数 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。
二、解题
滑动窗口
滑动窗口双指针,移动右指针,遇到1继续,遇到0,使用一个计数器计算0出现的个数,如果0出现的个数大于K,则移动左窗口,直至k缩减为k。动态记录滑动窗口的大小right- left+1;
class Solution
public int longestOnes(int[] nums, int k)
//滑动窗口
int left = 0,right = 0,zcnt = 0;
int size = 0;
//记录0出现的次数,如果大于k就移动左边界,移动至不大于k的值。
int length = nums.length;
while(right < length)
if(nums[right] == 0)
zcnt++;
while(zcnt > k)
if(nums[left] == 0)
zcnt--;
left++;
size = Math.max(size,right - left + 1);
right++;
return size;
时间复杂度:O(n);
空间复杂度:O(1)。
以上是关于1004. 最大连续1的个数 III-滑动窗口双指针的主要内容,如果未能解决你的问题,请参考以下文章
javaleetcode1004. 最大连续1的个数 III;2024. 考试的最大困扰度
javaleetcode1004. 最大连续1的个数 III;2024. 考试的最大困扰度