算法-尺取法

尺取法(Sliding Window Technique),也称为滑动窗口算法,是一种常用于解决数组或字符串子区间问题的有效方法。其核心思想是通过维护一个窗口(子区间),在数组或字符串上滑动这个窗口,以找到满足特定条件的最优解。这种方法能够显著降低时间复杂度,尤其是在处理大数据集时。

以下是对尺取法的基本讲义,包括其原理、步骤和一些示例代码。

原理

尺取法的基本思想是利用两个指针(或称为“窗口的两端”)来维护一个当前考虑的子区间(窗口)。通过移动这两个指针,可以遍历所有可能的子区间,并在遍历过程中维护一些必要的状态信息(如窗口内的和、最大值、最小值等),从而找到满足条件的最优解。

步骤

  1. 初始化
    • 定义两个指针 left 和 right,分别表示窗口的左端和右端。
    • 初始化一些必要的状态变量,如窗口内的和、最大值、最小值等。
  2. 扩展窗口
    • 移动右指针 right,扩展窗口,同时更新状态变量。
    • 检查当前窗口是否满足条件。
  3. 收缩窗口
    • 如果窗口不满足条件,移动左指针 left,缩小窗口,同时更新状态变量。
    • 重复步骤 3 直到窗口满足条件或左指针超过右指针。
  4. 记录结果
    • 在每次满足条件时,记录当前窗口的状态(如窗口大小、窗口内的和等),并在遍历结束后找到最优解。
  5. 继续遍历
    • 重复步骤 2-4,直到右指针遍历完整个数组或字符串。

例题 

黑白奶牛(NHOI2016xjt4)

题目描述

有 N 只奶牛从左往右排成一行,编号是 1 至 N 。这 N 只奶牛当中,有一些奶牛是黑色的,其余的是白色的。

color[i] 表示第 i 只奶牛的颜色,如果 color[i]=0 则表示第 i 头奶牛是黑色的,如果 color[i]=1 则表示第 i 头奶牛是白色的。

六一奶牛儿童节快到了,农场主 Farmer John 要从这 N 头奶牛当中,挑选尽可能多的奶牛去参加晚会。

Farmer John 挑选奶牛的原则是:挑选编号是连续的一段奶牛,这一段奶牛的颜色必须全部是白色的。
Farmer John 有一个魔法棒,每用一次魔法棒就可以把一头黑色的奶牛变成一头白色的奶牛,魔法棒最多只能使用 K 次。

在上述条件下,最多可以有多少头奶牛去参加晚会呢?

输入格式

第一行,两个整数,N 和 K。

第二行,N 个整数,第 i 个整数就是 color[i] , color[i] 要么是 0,要么是 1。

数据规模

对于 50% 的数据,1 <= N <= 1000,K = 0 ,即不能使用魔法棒。

对于 100% 的数据,1 <= N <= 100000, 1 <= K <=N。

输出格式

一个整数,表示最多有多少头奶牛可以去参加晚会。

样例

输入数据 1

11 0
1 1 0 0 1 1 1 1 0 1 1

Copy

输出数据 1

4

Copy

输入数据 2

11 1
1 1 0 0 1 1 1 1 0 1 1

Copy

输出数据 2

7

Copy

样例解释

样例 1 :由于 K=0,所以不能使用魔法棒,所以挑选编号是 5 至 8 的奶牛去参加晚会。

样例 2 :由于 K=1,所以最多可以使用 1 次魔法棒,使用魔法棒把第 9 头奶牛变成白色奶牛,然后挑选编号是 5 至 11 的奶牛去参加晚会。

答案:

#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int n,l,k,hehe1[100000],a[100000],sum,ma;
int main()
{cin>>n>>k;for(int i=1;i<=n;i++){cin>>hehe1[i];a[i]=a[i-1];if(hehe1[i]==0) a[i]++;}for(int i=1;i<=n;i++){if(a[i]-a[l]<=k){sum++;if(i==n&&sum>ma){ma=sum;}                }else{if(sum>ma){ma=sum;}l++;}}cout<<ma;return 0;
}

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

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

相关文章

Greenhills学习总结

学习背景&#xff1a;近期参与xx项目过程中&#xff0c;遇到较多的关于代码集成编译的知识盲区&#xff0c;因此需要进行相关知识的学习和扫盲。 参考资料&#xff1a;GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHi…

Docker consul注册中心

一、consul 1.1、什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。 起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。 直到后来出现了多个节点的分布式架构&#x…

React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode

文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用&#xff1a;注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…

前100+大型语言模型(LLMs)面试问题和路线图

介绍 获取前 100 个精选的 LLM 面试问题&#xff0c;了解如何准备生成式 AI 或 LLM 面试准备和大型语言模型 &#xff08;LLM&#xff09; 面试准备的学习路径。 This article explains learning path for large language models (LLMs) interview preparation. You will fin…

陪诊小程序之uniapp(从入门到精通)

1.uniapp如何使用vue3编写页面 <template><view class"content"><navbar name"navbar组件"></navbar><image class"logo" src"/static/logo.png"></image><view class"text-area"&…

K14837 时空穿越(through)

题目描述 杰克船长的“黑珍珠号”误入了一片海域&#xff0c;一翻风浪过后&#xff0c;他发现自己穿越到了一个未知且神奇的岛屿上&#xff0c;岛屿上空无一物&#xff0c;只有一块写着字的牌子&#xff0c;上面写着&#xff1a;欢迎来到这里&#xff0c;参加我们的时间旅行计…

【OD】【E卷】【真题】【100分】补种未成活胡杨(PythonJavajavaScriptC++C)

题目描述 近些年来&#xff0c;我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨&#xff08;编号1-N&#xff09;&#xff0c;排成一排。 一个月后&#xff0c;有M棵胡杨未能成活。 现可补种胡杨K棵&#xff0c;请问如何补种&#xff08;只能补种&#xff0c;不能新种&#…

C++进阶:AVL树实现

目录 一.AVL的概念 二.AVL的实现 2.1AVL树的结构 2.2AVL树的插入 2.2.1AVL树插入一个值的大概过程 2.2.2平衡因子更新 2.2.3插入节点及更新平衡因子的实现 2.3旋转 2.3.1旋转的原则 2.3.2右单旋 2.3.3右单旋的代码实现 2.3.4左单旋 2.3.5左单旋的代码实现 2.3.6…

vue综合指南(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南(二) 目录 21、介绍虚拟DOM 22、vue生命周期的理解 23、vue父组件向子组件传递数据…

架构设计笔记-20-补充知识

知识产权 我国没有专门针对知识产权制定统一的法律(知识产权法)&#xff0c;而是在民法通则规定的原则下&#xff0c;根据知识产权的不同类型制定了不同的单项法律及法规&#xff0c;如著作权法、商标法、专利法、计算机软件保护条例等&#xff0c;这些法律、法规共同构成了我…

STM32_实验5_中断实验

通过外部中断来检测四个按键按下的状态&#xff1a; WK_UP 控制蜂鸣器响和停 KEY0 控制 LED_R 互斥点亮 KEY1 控制 LED_G 互斥点亮 KEY2 控制 LED_B 互斥点亮。 中断的基本概念&#xff1a; 中断请求&#xff08;IRQ&#xff09;&#xff1a; 当发生某个特定事件&#xff08;例…

【问题解决】——当出现0xc000007b和缺少mfc140.dll时,该怎么做才能让软件可以打开

目录 事情起因 问题处理 明确定义 填坑之路 最后我是怎么解决的&#xff08;不想看故事直接到这里&#xff09; 事情起因 最近想要重新安装西门子博途来做西门子的一些算法的时候&#xff0c;发现自己软件装的是V15.1的版本&#xff0c;而买的plc1200固件版本要求至少16以…

(AtCoder Beginner Contest 375)D - ABA

&#xff08;AtCoder Beginner Contest 375&#xff09;D - ABA 题目大意 给定一个只包含大写字母的字符串S&#xff0c;求解其长度为3的回文字序列个数 思路 首先暴力枚举区间计算答案 O ( ∣ S ∣ 2 ) O(|S|^2) O(∣S∣2) 一定是会超时的 我们考虑使用前缀和思想 我们对于…

两个yaml转成的 excel对比

语言本地化过程中 &#xff0c;yaml转成excel格式给翻译人员使用&#xff0c;翻译好之后再转换成yaml格式给游戏使用。但是在翻译人员编辑时是不可控的&#xff0c;有可能造成某种想不到的问题。因此&#xff0c;需要将翻译人员的excel转成yaml ,再将yaml转成excel和翻译人员的…

特征编码:假如是树模型,还需要特征编码吗?

如果使用树模型&#xff0c;不一定需要进行传统的特征编码&#xff0c;具体取决于特征的性质和数据的情况。 一、不需要编码的情况 对于纯数值型特征&#xff1a;树模型可以直接处理数值型特征&#xff0c;无需进行编码。例如&#xff0c;如果特征是年龄、收入等连续数值&…

智能工厂的设计软件 表征论的三向度空间(意向相关项)

本文要点 在 最高级别上的数学诠释学观点中表征论的三向度空间&#xff08; 三个意向相关relative项引用&#xff09; “表征模式张量 空间--一般量化词【词典词】&#xff1a; 产品生产线程thread中最后的 “封装”的生产任务--以主取式存在分类学 划分的 “Package”中唯…

文本数据可视化

文字是传递信息最常用的载体。在当前这个信息爆炸的时代,人们接收信息的速度已经小于信息产生的速度,尤其是文本信息。当大段大段的文字摆在面前,已经很少有耐心去认真把它读完,经常是先找文中的图片来看。这一方面说明人们对图形的接受程度比枯燥的文字要高很多,另一方面…

推荐IDE中实用AI编程插件,目前无限次使用

插件介绍 一款字节跳动推出的“基于豆包大模型的智能开发工具” 以vscode介绍【pycharm等都可以啊】&#xff0c;这个插件提供智能补全、智能预测、智能问答等能力&#xff0c;节省开发时间 直接在IDE中使用&#xff0c;就不用在网页中来回切换了 感觉还可以&#xff0c;响应速…

SelectFromModel:如何调整阈值来控制特征选择的数量?

在使用SelectFromModel结合如梯度提升决策树&#xff08;GBDT&#xff09;等模型进行特征选择时&#xff0c;可以通过以下几种方式调整阈值来控制选择的特征数量&#xff1a; 一、设置阈值参数&#xff08;以基于特征重要性为例&#xff09; 对于一些模型&#xff0c;如基于树…

【SQL实验】 设计主码、check约束 、外码(SSMS 菜单操作)

设计主码 PK——主码 右键点击所需的表&#xff0c;选择“设计”。 选择需要作为主键的列&#xff0c;右键点击并选择“设为主键”。 保存更改&#xff0c;确保主键设置生效。 如果出现下图&#xff1a; 解决方式&#xff1a; 把√取消掉&#xff0c;修改后&#xff1a; 确定…