当前位置: 首页 > news >正文

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

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

题目描述

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
在这里插入图片描述

思路

这里可以转换思路,让题意更加明确:即,求一个最大连续区间,要求该区间中的0的个数最多为k个
这样一来就变成了滑动窗口问题:
滑动窗口右侧right:

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

  • 遇到0了
    如果当前窗口0的个数不足k个(<K)则更新窗口中0的个数
    如果当前窗口0的个数以满足k个,则强制移动窗口左侧left,直到left“吐出”一个1

代码

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有没有指向0break;}else{left++;}}maxLen = Math.max(maxLen,right-left+1);//记录最长区间}}else{//遇到1了maxLen = Math.max(maxLen,right-left+1);//记录最长区间}}return maxLen;}
}
http://www.lryc.cn/news/163073.html

相关文章:

  • Linux CentOS7 添加中文输入法
  • Python接口自动化封装导出excel方法和读写excel数据
  • React三属性之:refs
  • 将Vue项目迁移到微信小程序中
  • php权限调整强制用户退出的解决方案
  • [uniapp]踩坑日记 unexpected character > 1或‘=’>1 报错
  • 面试求职-经典面试问题
  • 在Linux服务器上部署Tornado项目
  • JWT认证、drf-jwt安装和简单使用、实战之使用Django auth的User表自动签发、实战之自定义User表,手动签发
  • conda常用命令及问题解决-创建虚拟环境
  • 严选算法模型质量保障
  • 学习Bootstrap 5的第七天
  • VirtualBox(内有Centos 7 示例安装)
  • 在 Git 中删除不再位于远程仓库中的本地分支
  • 容器编排学习(九)服务管理与用户权限管理
  • 【C刷题】day1
  • zabbix配置钉钉告警、和故障自愈、监控java
  • 第九章 Linux实际操作——Linux磁盘分区、挂载
  • 设计模式-解释器设计模式
  • 实现 js 中所有对象的深拷贝(包装对象,Date 对象,正则对象)
  • PathVariable注解
  • 宋浩高等数学笔记(十二)无穷级数
  • 使用Clipboard插件实现Vue的剪贴板功能
  • Latex参考文献中大写字母编译后自动变成了小写,如何保持原字母大写形式
  • Jest单元测试相关
  • Scrum敏捷开发流程及关键环节
  • 微服务04-Gateway网关
  • YOLOV7改进-针对小目标的NWD(损失函数)
  • 计算机二级考试题库及答案
  • 2023国赛高教社杯数学建模C题思路分析