(3)滑动窗口算法练习:最长连续1的个数Ⅲ

最长连续1的个数Ⅲ

题目链接:1004. 最大连续1的个数 III - 力扣(LeetCode)

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k0 ,则返回 数组中连续 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。

思路解析:

题目说明最多翻转k个0,代表翻转0的个数可以有[0, k]个,所以有两种情况:

  1. 翻转个数在区间[0, k]中

  2. 翻转个数大于k个时只能翻转k

所以,本题可以将原有问题转化为数组中0的个数不超过k个时,数组中连续1的最大个数

本题的暴力解法为:枚举子数组+记录0的个数,在暴力解法的基础上,对暴力解法进行优化,在枚举的过程中,定义两个指针leftright,均从起始位置开始向右移动,当right位置对应值为0时,计数器zero加1,代表0出现1次,便于后面与k进行比较判断,当zero>k时,说明此时[left, right]区间为满足要求的区间,接着移动left

以示例数组为例

正向性:当zero>k时,此时表示0的个数已经到达k个,接下来需要枚举下一个区间,那么left就需要向后移动,此时的right不需要向后移动,因为在区间(left=0)[left, right]中,0的个数已经到达k个,如果right再回到left=1的位置时,此时的区间(left=1)[left, right]中依旧包括刚才已经出现的k个0,导致计数器依旧会在同样的位置达到zero>k,所以只需要让right开始位置不需要回退,满足正向性

对于left指针的移动,为了确保区间[left, right]中不包括已经判断过的区间,可以让left移动到上一次满足条件的区间的最后一个元素的位置,[left, right]区间就避开了包含上一次满足条件的区间,而对于zero计数器来说,因为left回到了上一个合法区间的最后一个元素的位置,如果该位置的数值为0,则zero计数器需要减1,代表这个位置已经翻转过一次,还有k-1可以翻转,否则不处理

因为满足正向性,所以可以使用滑动窗口算法

  1. 进窗口:因为是统计0的个数,所以当right位置的值为0时,zero计数器加1,否则不处理

  2. 判断:当zero>k时,此时代表合法区间已经出现,因为k到达上限,所以不可以继续向后移动

  3. 出窗口:left移动到上一个合法区间的最后一个元素的位置,如果为0,则计数器减1

  4. 更新结果:用len存储最长的子数组

参考代码:

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int len = 0;int zero = 0;for (int right = 0, left = 0; right < nums.size(); right++) {if (nums[right] == 0) {zero++;}while (zero > k) {if (nums[left++] == 0) {zero--;}}len = max(len, right - left + 1);}return len;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GreenHills】GHS-Servecode的查看和说明

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 在Green Hills客户申请license试用以及正式文件的Servecode编号会有不同&#xff0c;该文档对此进行说明并如何主动查看Servecode&#xff0c;并且说明Servecode的类别&#xff0c;通过Servecode了解客户授权情况。 …

【机器学习】初学者经典案例(随记)

&#x1f388;边走、边悟&#x1f388;迟早会好 一、概念 机器学习是一种利用数据来改进模型性能的计算方法&#xff0c;属于人工智能的一个分支。它旨在让计算机系统通过经验自动改进&#xff0c;而不需要明确编程。 类型 监督学习&#xff1a;使用带标签的数据进行训练&…

spring boot 3.2.x 使用CDS加速启动

maven 配置 业务包和依赖包分离 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable><la…

2-30 基于matlab的神经网路下身份证号码识别算法

基于matlab的神经网路下身份证号码识别算法&#xff0c;二值化、膨胀处理、边界区域划分、身份证字符分割&#xff0c;字符识别算法&#xff0c;输出识别结果。并保存识别结果。程序已调通&#xff0c;可直接运行。 2-30 神经网络 身份证识别 图像处理 - 小红书 (xiaohongshu.c…

FastAPI 学习之路(四十)后台任务

我们在实际的开发中&#xff0c;都会遇到&#xff0c;我们要执行的一些任务很耗时&#xff0c;但是对于前端&#xff0c;没必要进行等待。比如发送邮件&#xff0c;读取文件。我们在fastapi如何实现呢。 其实很简单&#xff0c;fastapi已经给我们封装好一个现成的模块&#xff…

4款免费国产开源软件,功能过于强大,常被认为是外国人开发

之前小编分享了一些良心的电脑软件&#xff0c;大部分都是国外的开源软件&#xff0c;就有部分同学在后台说小编有点极端了&#xff0c;国内也是有良心的电脑软件的。 本期就是国产软件专场&#xff0c;今天就给大家推荐几款良心的国产电脑软件&#xff0c;说真的&#xff0c;…

UNIAPP_ReferenceError: TextEncoder is not defined 解决

错误信息 1、安装text-decoding npm install text-decoding2、main.js import { TextEncoder, TextDecoder } from text-decoding global.TextEncoder TextEncoder global.TextDecoder TextDecoder

list模拟实现【C++】

文章目录 全部的实现代码放在了文章末尾准备工作包含头文件定义命名空间类的成员变量为什么节点类是用struct而不是class呢&#xff1f;为什么要写get_head_node? 迭代器迭代器在list类里的实例化和重命名普通迭代器operator->()的作用是什么&#xff1f; const迭代器反向迭…

ENSP防火墙综合配置

综合拓扑&#xff1a; 实验要求&#xff1a; 要求一 生产区的安全策略配置 办公区的安全策略 要求二 生产区的安全策略 游客和办公区的安全策略 因为ISP返回的数据包会被防火墙最后的默认安全策略给拒绝&#xff0c;所以&#xff0c;把要ISP返回的数据给允许通过 要求三 增加…

python如何计算今天是星期几

需要解决的问题&#xff1a;时区问题 解决方案&#xff1a;引入pytz 封装的方法如下&#xff1a; import datetime from .. import pytzweek_list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六&quo…

qt 自定义信号和槽举例

在Qt中&#xff0c;自定义信号和槽是对象间通信的一种强大机制。以下是一个简单的例子&#xff0c;展示了如何定义和使用自定义信号和槽。 首先&#xff0c;我们定义一个简单的Worker类&#xff0c;它有一个自定义信号workCompleted&#xff0c;当某个任务完成时&#xff0c;这…

人工智能及深度学习在病理组学中的应用概述|系列推文·24-07-11

小罗碎碎念 从本期推文开始&#xff0c;小罗将开始进行一项长期的工作——从头开始梳理人工智能在病理组学中的应用。 我会先从机器学习的进展开始讲&#xff0c;随后过渡到深度学习&#xff0c;再进一步阐述数据的处理分析方法&#xff0c;最后介绍人工智能在精准医疗以及病…

不用sleep 来实现延时,用handler 实现延时

如果您希望继续使用Handler来实现延时而不使用sleep&#xff0c;并且想保持代码结构清晰&#xff0c;可以采用链式postDelayed调用来替代之前的多层嵌套。同时&#xff0c;我将展示如何通过创建一个方法来组织这些延时任务&#xff0c;使得代码更加模块化和易于管理。 首先&…

django超市管理系统-计算毕业设计源码50628

摘要 随着零售业的快速发展和数字化趋势的加强&#xff0c;超市作为零售业的重要组成部分&#xff0c;面临着日益增长的竞争压力。为了提高超市的运营效率、降低管理成本并提供更好的客户服务&#xff0c;超市管理系统的引入变得至关重要。基于Python的超市管理系统旨在利用先进…

【MyBatis】——入门基础知识必会内容

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

Unity3D 太空大战射击游戏

一、前言 本案例是初级案例&#xff0c;意在帮助想使用unity的初级开发者能较快的入门&#xff0c;体验unity开发的方便性和简易性能。 本次我们将使用团结引擎进行开发&#xff0c;帮助想体验团结引擎的入门开发者进行较快的环境熟悉。 本游戏案例以太空作战为背景&#xff0c…

kubernetes集群部署:关于CRI(一)

上周接到了一项紧急预研任务&#xff1a;kubernetes各项属性采集。目前我手里已经存在二进制部署的一套kubernetes&#xff08;v1.23版本CRI&#xff1a;dockershim&#xff09;集群&#xff1b;为了适配的广泛性&#xff0c;决定使用kuberadm工具部署最新&#xff08;v1.30版本…

16集 用ESP-DL(ESP32)编译Tensorflow lite语音识别工程-《MCU嵌入式AI开发笔记》

16集 用ESP-DL&#xff08;ESP32&#xff09;编译Tensorflow lite语音识别工程-《MCU嵌入式AI开发笔记》 参考文档&#xff1a; ESP-DL 用户指南&#xff1a; https://docs.espressif.com/projects/esp-dl/zh_CN/latest/esp32/index.html 这个ESP-DL 是由乐鑫官方针对乐鑫系列…

SwiftUI @FetchRequest 中 CoreData 托管对象不能正确被刷新的解决

问题现象 在 CoreData 背后加持的 SwiftUI 应用中,我们在视图(View)中往往会采用 @FetchRequest 来查询、排序和过滤我们心仪的托管对象。 不过在上面的示意图中我们发现:虽然 Challenge(挑战)托管对象状态已经变为“失败”,但仍然显示在了最顶部的“正在进行”挑战的 …

概率统计(二)

二维离散型 联合分布律 样本总数为16是因为&#xff0c;两封信分别可以放在4个信箱 边缘分布律 条件分布律 独立性 选填才能用秒杀 联合概率乘积不等于边缘概率的乘积则不独立 二维连续型 区间用一重积分面积用二重积分 离散型随机变量 常见6个分布的期望和方差 离散型随机变…