当前位置:网站首页>LeetCode_487_最大连续1的个数Ⅱ
LeetCode_487_最大连续1的个数Ⅱ
2022-08-08 10:37:00 【Fitz1318】
题目链接
题目描述
给定一个二进制数组 nums ,如果最多可以翻转一个 0 ,则返回数组中连续 1 的最大个数。
示例 1:
输入:nums = [1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
当翻转以后,最大连续 1 的个数为 4。
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:4
提示:
1 <= nums.length <= 10^5nums[i]不是0就是1.
进阶:如果输入的数字是作为 无限流 逐个输入如何处理?换句话说,内存不能存储下所有从流中输入的数字。您可以有效地解决吗?
解题思路
在最多可以翻转一个0的情况下寻找数组nums中连续1的最大个数,等价于寻找数组nums中的最多包含1个0的最长子数组的长度
滑动窗口法
- left:控制左边界
- right:控制右边界
- count0表示滑动窗口中0的数量
- 对于每一个右边界,如果
nums[right] == 0,那么count0++- 如果
count0 > 1,则当nums[left] == 0时将count0--,否则count0不变,然后将left++,直到count0 <= 1
- 如果
- 当前滑动窗口
[left,riht]中的子数组为最多包含一个0的子数组,其长度为right - left + 1,使用当前子数组的长度更新子数组的最大长度
AC代码
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int left = 0;
int right = 0;
int ans = 0;
int count0 = 0;
for (right = 0; right < nums.length; right++) {
if (nums[right] == 0) {
count0++;
}
while (count0 > 1) {
if (nums[left] == 0) {
count0--;
}
left++;
}
ans = Math.max(ans, right - left + 1);
}
return ans;
}
}
边栏推荐
猜你喜欢

shell 创建LVM逻辑据卷

卫星互联网真能替代 5G?

目标检测中的Bounding Box Regression Loss

Loadrunner的录制event为0的问题解决方法与思路

3 million tenders!Qingdao Medical Security Bureau host database middleware operation and maintenance service project

Loadrunner12.0.2 installation and Chinese language pack installation (Chinese)

How to uniformly handle error exceptions in embedded C programming?

苹果开发者账号申请流程完整版

Vulnhub靶机:GEMINI INC_ 1

Classificition Loss in target detection
随机推荐
四、业务数据解析
SCCM2012R2管理之版本更新
文档数据库是怎么定位一个文档的呀?
人大金仓数据库登录、查看数据库
牛客收藏上万的神作!这份阿里P8手写的MySQL主从原理手册真的牛
English token preprocessing, used to process English sentences into words
二、线性结构
Solutions and ideas for the problem that Loadrunner's recording event is 0
嵌入式C编程中错误异常该如何统一处理?
带你深入理解3.4.2的版本更新,对用户带来了什么?
基于ftp协议的上传与下载
2万字50张图玩转Flink面试体系
Optional common method analysis
深度强化学习发展史
Hystrix熔断器
【力扣】两数相加
Classificition Loss in target detection
In the.net core, the use of c # realize fastdfs batch file upload more
业务缓存之体系化设计与开发
关于振弦采集模块及采集仪振弦频率值准确率的问题