【算法】滑动窗口——最大连续1的个数

本篇文章讲的是“最大连续1的个数”这道题,从最开始的简单暴力到用滑动窗口算法实现解题的思路历程,有需要借鉴即可。

目录

  • 1.题目
  • 2.暴力求解
  • 3.滑动窗口解法
    • 3.1优化一:end重返start优化,end指针不回退
    • 3.2优化二:某一start指向下,一定不是最大的时候,直接优化掉

1.题目

题目链接:LINK
在这里插入图片描述

2.暴力求解

题目解析:这里看到题目之后,大概就是让我们找在这穿数字中连续的1最大有几个,但是这个题目还有个“翻转”的设定。

暴力求解:其实我们想到的暴力求解无非是挨个遍历,定义两个指针,一个是start指针,一个是end指针,start首先指向第一个数字,end也指向第一个数字,碰到0我们就“反转一下”,直到反转次数不足或者说是该数组遍历完成。这样的话我们可以继续start指向下一个数字,重复上述过程,期间取最大值即可。

技巧(反转转换):题目中所说的“反转”,可是我们如果真的反转了,在下一次遍历时候还得改回来,很麻烦,这里可以用个变量统计一下遇到0的个数就行,不用真的进行“翻转”。

大概是下面这个过程:
在这里插入图片描述

时间复杂度:O(N^2)

代码我写好了,除了时间复杂度问题之外,没什么问题哈。

class Solution {
public:
//暴力解法int longestOnes(vector<int>& nums, int k) {int zero = 0;int n = nums.size();int ret = 0;for(int left = 0;left < n;left++){zero = 0;int right = left;while(right < n){if(nums[right] == 1){right++;}else{zero++;if(zero > k)break;right++;}}        ret = max(ret,right - left);}return ret;}
};

时间复杂度比较高哈,虽然说这种方法很挫,但也是一种方法…我们下面在暴力求解的基础上对该题目进行优化:

3.滑动窗口解法

一上来,不可能一下就可以想到滑动窗口的。这里我必须强调一下:这里滑动窗口的解法是在暴力求解的基础上不断优化,在优化的过程中发现满足滑动窗口的规律,因而说最终优化成了滑动窗口算法。

3.1优化一:end重返start优化,end指针不回退

首先,我再看这个暴力解法的过程中,我们把不同的start位置看成不同的”组“,在不同组的时候,命名end可以继续向右移动,但是end到下一个start的时候又回到了start位置,显然十分消耗性能,因而这个地方可以优化一下。

比如说:
在这里插入图片描述
在这里插入图片描述

3.2优化二:某一start指向下,一定不是最大的时候,直接优化掉

这个优化什么意思呢?比如下图:第二组铁定比第一组短,压根就没必要去走第二组的情况
在这里插入图片描述
也就是说,第一组遍历完了,直接进行下图所示的这组,干脆直接这样:
在这里插入图片描述

然后到这里,两个指针,都是同向的,且不回退,这时候我就想到这是典型的”滑动窗口“题目,所以可以直接优化成滑动窗口解法:

class Solution {
public:
//暴力解法int longestOnes(vector<int>& nums, int k) {int zero = 0;int n = nums.size();int ret = 0;int left = 0,right = 0;for(right = 0;right < n ;right++){//进窗口if(nums[right] == 0){zero++;}//出窗口之后也会满足条件while(zero > k){if(nums[left++] == 0){zero--;}}//每次进窗口满足条件的情况下会自动更新,出完窗口下也会自动更新ret = max(ret,right - left + 1);}return ret;}
};

EOF

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

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

相关文章

【Android项目】“追茶到底”项目介绍

没有多的介绍&#xff0c;这里只是展示我的项目效果&#xff0c;后面会给出具体的代码实现。 一、用户模块 1、注册&#xff08;第一次登陆的话需要先注册账号&#xff09; 2、登陆&#xff08;具有记住最近登录用户功能&#xff09; 二、点单模块 1、展示饮品列表 2、双向联动…

Go语言系统学习笔记(一):基础篇

1. 写在前面 公司的新业务开发需要用到go语言&#xff0c;虽然之前没接触过这门语言&#xff0c;但在大模型的帮助下&#xff0c;边看项目边写代码也能进行go的项目开发&#xff0c;不过&#xff0c;写了一段时间代码之后&#xff0c;总感觉对go语言本身&#xff0c;我的知识体…

加密技术在保护企业数据中的应用

加密技术是企业数据保护的核心&#xff0c;对于维护信息安全至关重要。透明加密技术使文件加密后不改变用户对文件的使用习惯&#xff0c;内部文件打开自动解密&#xff0c;存储自动加密&#xff0c;一旦离开使用环境&#xff0c;加密文件将无法正常读取&#xff0c;从而保护文…

大模型+智能眼镜,让失明人士也能无障碍阅读

你有没有想过有一天你闭上眼睛也可以进行流畅阅读呢&#xff1f; 不是民科&#xff0c;也不是量子波动速读&#xff01;借助大语言模型和智能眼镜&#xff0c;来自维也纳工业大学、罗马第一大学和明尼苏达大学的研究者&#xff0c;提出了一种无需视力也能阅读的辅助系统&#…

使用fitten code插件(vscode),替换通义千问,识别需求中的输入输出

今天我们介绍一个工具,具体介绍可以参考我的这篇文章的介绍,支持vs code 插件,Fitten Code是一款由非十科技开发的AI代码助手,旨在通过大模型驱动来提升编程效率和体验-免费神器-CSDN博客https://blog.csdn.net/lijigang100/article/details/137833223?spm=1001.2014.3001…

Windows Server 2003安装DHCP服务器

0x00 前言 需要一个dhcp服务器&#xff0c;但是电脑只有一个windows server 2003&#xff0c;凑合着用的。 0x01 安装DHCP服务器 1. 打开控制面板&#xff0c;添加删除程序–添加/删除Windows组件–网络服务&#xff0c;勾选网络服务。 2. 点击【详细信息】&#xff0c;勾选…

深入Django:用户认证与权限控制实战指南

title: 深入Django&#xff1a;用户认证与权限控制实战指南 date: 2024/5/7 18:50:33 updated: 2024/5/7 18:50:33 categories: 后端开发 tags: AuthDecoratorsPermissionsGuardianRESTAuthSessionMgmtMFA 第1章&#xff1a;入门Django与设置 1.1 Django安装与环境配置 在…

Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】

1、数组 特别需要注意的是&#xff1a;在 Go 语言中&#xff0c;数组长度也是数组类型的一部分&#xff01;所以尽管元素类型相同但是长度不同的两个数组&#xff0c;它们的类型并不相同。 1.1、数组的初始化 1.1.1、通过初始化列表{}来设置值 var arr [3]int // int类型的数…

Terraform资源

资源是Terraform中最核心的部分&#xff0c;使用Terraform的目的就是用于管理资源。 在Terraform中&#xff0c;资源使用resource块定义。 一个resource可以定义一个或多个基础设施资源对象&#xff0c;如&#xff1a;VPC&#xff0c;虚拟机&#xff0c;DNS记录&#xff0c;Con…

渗透测试流程

一、攻击流程 信息收集阶段→漏洞分析阶段→攻击阶段→后渗透阶段 二、信息收集 1、收集内容&#xff1a; IP资源&#xff1a;真实IP获取、旁站信息收集、C段主机信息收集域名发现&#xff1a;子域名信息收集、子域名枚举发现子域名、搜索引擎发现子域名、第三方聚合服务器发…

4G工业路由器快递柜应用案例(覆盖所有场景)

快递柜展示图 随着电商的蓬勃发展,快递行业迎来高速增长。为提高快递效率、保障快件安全,智能快递柜应运而生。但由于快递柜部署环境复杂多样,网络接入成为一大难题。传统有线宽带难以覆盖所有场景,而公用WiFi不稳定且存在安全隐患。 星创易联科技有限公司针对这一痛点,推出了…

好消息|5月6日起换发补发出入境证件可“全程网办”

国家移民管理局从2024年5月6日起&#xff0c;实施若干便民利企出入境管理的六项政策措施&#xff0c;包括在北京等20个城市试点实行换发补发出入境证件的“全程网办”&#xff0c;该举措对于访问学者、博士后研究人员及联合培养博士都是利好消息。故知识人网小编转载发布。 为更…

类和对象之六个默认成员函数

目录 1.构造函数 2.析构函数 3.构造函数&#xff08;重载&#xff09; 4.拷贝构造 4.1特征&#xff1a; 4.2写法&#xff1a; 4.3浅拷贝和深拷贝 5.运算符重载 6.&运算符重载和const成员 6.1权限问题 Date类中是否加const修饰 6.2取地址及const取地址操作符重载…

vue-img-cutter 图片裁剪详解

前言&#xff1a;vue-img-cutter 文档&#xff0c;本文档主要讲解插件在 vue3 中使用。 一&#xff1a;安装依赖 npm install vue-img-cutter # or yarn add vue-img-cutter # or pnpm add vue-img-cutter 二&#xff1a;构建 components/ImgCutter.vue 组件 <script se…

sh包装脚本

两个脚本,运行的时间间隔分别是一分钟和五分钟,放入到sh文件中,挂在后代,脚本里面的路径最好是绝对路径。 新建sh文件 新建 run_test.sh 文件,使其可以运行两个不同的 Python 脚本,一个每分钟运行一次,另一个每五分钟运行一次。下面是修改后的 run_test.sh 文件的示例:…

光伏SRM供应商管理解决方案

供应商管理是光伏企业中重要的一环&#xff0c;通过SRM管理供应商&#xff0c;可以提高产品质量&#xff0c;降低采购成本&#xff0c;并集成供应链&#xff0c;提高核心竞争力。 一、搭建管理系统 分为供应商和商户&#xff0c;供应商需要完善基本信息、类别、等级、产品概要…

大历史下的 tcp:一个松弛的传输协议

如果 tcp 是一个相对松弛的协议&#xff0c;会发生什么。 所谓松弛感&#xff0c;意思是它允许 “漏洞”&#xff0c;允许可靠传输的不封闭&#xff0c;大致就是&#xff1a;“不求 100% 可靠&#xff0c;只要 90%(或多或少) 可靠&#xff0c;另外 10% 的错误可检测到” or “…

Python扩展模块的开发

有关python C扩展开发的教程可以参考概述 — Python 3.12.3 文档。项目已经发布至python官方的pypi里了。具体详情请见AdroitFisherman PyPI。目前该项目还处在测试阶段。尚有部分模块需要开发和测试。 项目结构 项目结构见下图&#xff1a; 代码展示与说明 以单链表(SingleL…

5.7代码

1.环境治理 分析&#xff1a;最开始进入了一个误区&#xff0c;觉得都有通路了直接算通路就可以&#xff0c;后来才发现居然是最小路径的总和&#xff0c;所以大概是每减一次都要算一次各点之间的最小路径了&#xff0c;然后是循环&#xff0c;到需要的条件为止 总的来说思路不…

昂科烧录器支持Infineon英飞凌的三相电机驱动器TLE9877QXA40

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Infineon英飞凌的三相电机驱动器TLE9877QXA40已经被昂科的通用烧录平台AP8000所支持。 TLE9877QXA40是一款单芯片三相电机驱动器&#xff0c;集成了行业标准的ARMCortex™M3 内…