最大连续1的个数(滑动窗口)

算法原理:

这道题大眼一看是关于翻转多少个0的问题,但是,如果你按照这种思维去做题,肯定不容易。所以我们要换一种思维去做,这种思维不是一下就能想到的,所以想不到也情有可原。

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

我们可以转换成:我们求一个子数组,该子数组满足:在一段连续的区间内0的个数不大于k且该数组的长度是所有子数组中最长的

这样其实就类似于一个滑动窗口的问题了。

如果还没有看明白,没关系。详细解释一下:对比以前的滑动窗口,以前的判断条件是求某一段的和最大/求某一段含有不重复的字符最多......,只不过这次的判断条件是0的个数不能超过k,由于这个条件对我们子区间内还要进行操作,所以可能会使你下不去手,困惑。

但是只要抓住本质,按照那个模版来就能写对,这还需要平时多练。

暴力解法就不展示了,就是两个for循环枚举。

代码实现
java 复制代码
class Solution {
        //滑动窗口:
    public int longestOnes(int[] nums, int k) {
        int ret=0;
        for(int left =0,right =0,zero =0;right<nums.length;right++){
            if(nums[right] == 0){
                zero++;//进窗口
            }
             while(zero>k){//判断
                    if(nums[left++] == 0){
                        zero--;//出窗口
                    }
                }
            ret = Math.max(ret,right - left + 1);//更新结果
        }
        return ret;
    }
}
相关推荐
Navigator_Z2 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy2 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
mmmmath_32 小时前
LeetCode.104.二叉树的最大深度
数据结构·leetcode
YangYang9YangYan3 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl23 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风3 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技3 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
171320330计算机毕设编程5 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生5 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构