算法笔记--最大连续1的个数Ⅲ

leetcode题目链接:1004. 最大连续1的个数 III

题目描述

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

思路

这里可以转换思路,让题意更加明确:即,求一个最大连续区间,要求该区间中的0的个数最多为k个

这样一来就变成了滑动窗口问题:

滑动窗口右侧right:

  • 遇到1了,就记录当前窗口大小,并记录窗口最大值

  • 遇到0了

    如果当前窗口0的个数不足k个(<K)则更新窗口中0的个数

    如果当前窗口0的个数以满足k个,则强制移动窗口左侧left,直到left"吐出"一个1

代码

java 复制代码
class Solution {
    //转换问题看法:求一个连续最大区间,要求这个区间中0的个数最多为K个
    public int longestOnes(int[] nums, int k) {
        int len = nums.length; //数组长度
        int left=0;
        int right=0;
        int numOfZero = 0;//记录当前区间0的个数
        int maxLen = 0; //记录区间最大长度
        for(;right<len;right++){
            if(nums[right] == 0){//遇到0了
                if(numOfZero < k){//还可以变
                    numOfZero++;
                    maxLen = Math.max(maxLen,right-left+1);//记录最长区间
                }else{//k不够了,刚好numOfZero = k,这时需要left吐一个0出来
                    while(left <= right){
                        if(nums[left] == 0){
                            left++;
                            numOfZero--;
                            if(nums[right] == 0)numOfZero++; //这里把left之前指向的0吐出去后,还要看新的right有没有指向0
                            break;
                        }else{
                            left++;
                        }
                    }
                    maxLen = Math.max(maxLen,right-left+1);//记录最长区间
                }
            }else{//遇到1了
                maxLen = Math.max(maxLen,right-left+1);//记录最长区间
            }
        }
        return maxLen;
    }
}
相关推荐
青 春 记 忆4 小时前
LeetCode 21. 合并两个有序链表|Python 解法详解
python·算法·leetcode·链表
尤乐娃子6 小时前
进入大厂(厂子大)实习Day12
前端·笔记·实习
Sagittarius_A*6 小时前
后量子密码|通识认知 03|量子威胁辟谣:Grover 算法对对称密码的影响与误区
算法·信息安全·密码学·量子计算·pqc·后量子密码
砚凝霜7 小时前
软考网络工程师|第 6 章 密码学、哈希、数字签名、数字证书 PKI 完整备考笔记
笔记·密码学·哈希算法
QAQo7T8 小时前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇
笔记·python·算法·蓝桥杯·排序算法
千里之行,始于足下sanhai8 小时前
P8686 [蓝桥杯 2019 省 A] 修改数组 - 数字魔法大冒险 题解
c++·算法·动态规划
lion_heart0018 小时前
成功日记Plus 智能记账:共享账本、预算管控、Excel 导出等一次讲清
笔记
小星星闪亮登场8 小时前
Codeforces Round 1115 ( Div. 2)
数据结构·c++·算法·贪心算法·排序算法·codeforces
计算机小白一个8 小时前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
Loge编程生活8 小时前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程