尺取法--例题模板详解

2023-10-29

尺取法

一种神奇的技巧。在Codeforces中显示它的算法名称叫做"two pointers", 直译成中文的话叫双指针法。

尺取法

顾名思义,像尺子一样取一段,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以说尺取法是一种高效的枚举区间的方法,是一种技巧,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情况下尺取法不可行,无法得出正确答案,所以要先判断是否可以使用尺取法再进行计算。

在这里插入图片描述

问题分析:

eg:给定一个序列(整数),找出最短的子序列长度,使得其和大于或等于S

使用尺取法时应清楚以下四点:

1、什么情况下能使用尺取法?
所求解的答案在区间内连续;在通过判断之后,区间的移动有明确的方向(一般是起点到终点)
2、何时推进区间的端点?
如上题:如果大于S左端点移动,如果小于S右端点移动遍历这个区间即可。
3、如何推进区间的端点?
左右指针移动
4、何时结束区间的枚举?
此题来说是遍历完成,也有可能是达到条件返回真即可。

总之:

区间左右端点一般从最整个数组的起点开始,之后判断区间是否符合条件在根据实际情况变化区间的端点求解答案。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
const int INF=0x3f3f3f;
int a[N];
int main()
{
    int n,s;
    while(cin>>n>>s)
    {
        int left=0,right=0;//初始化左右指针
        int ans=INF;//满足条件的最小长度
        int sum=0;//用于与s判断的临界的和变量
        for(int i=0;i<n;i++)
        cin>>a[i];
        while(1)
        {//尺取
            while(sum<s&&right<n)//先求出满足一个满足条件的sum值
            {//sum值求出就跳出,数组值越界就跳出
                sum+=a[right++];//右指针右移
            }
            //如果因为遍历完成,因为sum<s满足条件,但right<n不满足条件,而跳出while循环,那么就不用执行下面操作,因为所有的值相加小于s。
            if(sum<s)break;
            ans=min(ans,right-left);//不断更新最小区间
            sum-=a[left++];//左指针右移
        }
        if(ans==INF)//所有值相加小于s,找不出区间
            cout<<"0"<<endl;
        else
            cout<<ans<<endl;
        return 0;
    }
}

如果觉得写的不错点个赞吧!嘿嘿!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尺取法--例题模板详解 的相关文章

  • c++:异常处理机制

    什么是异常 1 异常是一种程序控制机制 与函数机制独立和互补 函数是一种以栈结构展开的上下函数衔接的程序控制系统 而异常是另一种控制结构 它依附于栈结构 却可以同时设置多 个异常类型作为网捕条件 从而以类型匹配在栈机制中跳跃回馈 异常的设计
  • 用栈实现算数表达式求值(C语言(基础版))

    要求 输入以 为结束的算数表达式 包括 并求值 1 基础的栈结构书写 包括创建栈 判断栈是否为空 以及数据的压栈和出栈 可参考MOOC上陈越姥姥的相关数据结构课程 include
  • 红帽认证-RHCE

    目录 RHCE认证考的是 ansible的内容 重要信息配置 一 安装和配置Ansible 二 创建和运行Ansible 临时命命 三 安装软件包 四 使用RHEL系统角色 五 使用Ansible Galaxy 安装角色 六 创建使用角色
  • PostgreSQL解锁表

    PostgreSQL解锁表 一 查看单表加锁情况 二 取消一个长时间执行的sql 2 1 终止查询 但是连接留在原地 2 2 终止查询 同时杀死连接 三 查看锁表的详细信息 一 查看单表加锁情况 SELECT relation regcla
  • 转眼已走在成为程序猿的路上

    考完研 没有回家 直接找地方实习 虽不是太累可还是不能和上学相比 宿舍只剩孤身一人 转眼四年 加油吧 梦在前方
  • Pytorch raise NotImplementedError NotImplementedError

    我以为是我的网络搭建出错 结果竟是输入格式出错 如果出现这个问题 一般是forward这块出错 我是拼写出错 是forward 修改过后正常 还有可能是tap缩进的时候出错 def没有对齐 如果报错 可以先查查格式
  • 网络安全的基础知识

    1 什么是防火墙 什么是堡垒主机 什么是DMZ 防火墙是在两个网络之间强制实施访问控制策略的一个系统或一组系统 堡垒主机是一种配置了安全防范措施的网络上的计算机 堡垒主机为网络之间的通信提供了一个阻塞点 也可以说 如果没有堡垒主机 网络间将
  • kafka接收消费消息

    三 kafka接收消费消息 本节教程在window下演示 如果是在linux上学习的同学 可以将命令的前缀进行替换即可 比如 window 下的 命令前缀 bin windows kafka topics bat 则linux下的命令前缀为
  • 2023 年你应该知道的 10 个开源项目

    精心策划的 2023 年 GitHub 上最有趣的开发工具和项目列表 1 NetBeans NetBeans 是一个开源的集成开发环境 因其支持多种编程语言和平台而受到开发人员的欢迎 动图 2 OpenCV OpenCV 是一个用于图像和视

随机推荐

  • latex 矩阵_数学作业小工具 MATLAB 到 LaTex

    代码总是能解放生产力 在做数学作业的时候会发现用Word LaTex写矩阵感觉麻烦 同时有时也会因为各种各样的原因写错或者看错 所以我写了一个简单的小脚本可以把MATLAB里的矩阵变成LaTeX代码 直接放到Word或者LaTex编辑器就可
  • Spring Boot 是什么,有什么用。

    见 http www csdn net article a 2016 05 12 15838098 maven Java web bootstrap dataTable app开发QQ群 566862629 希望更多人一起帮助我学习 首先
  • 计算机视觉二 局部图像描述子 SIFT算法

    目录 一 SIFT算法 1 基本介绍 SIFT算法可以解决的问题 2 相关概念 1 尺度空间理论 2 高斯模糊 3 高斯金字塔 4 关键点检测 DOG 5 关键点方向分配 6 关键点描述 7 关键点匹配 二 STFL算法的实现 1 SIFT
  • MATLAB算法实战应用案例精讲-【数据分析】时序异常检测(附实战应用案例)

    目录 前言 算法原理 算法思想 时序异常检测方法 1 统计方法 2 预测方法 机器学习 lt
  • scrapy的深入使用:

    1 区分正常的debug和scrapy中的debug 2 scrapy shell的使用 scrapy shell是scrapy提供的一个终端工具 能够通过它查看scrapy中对象的属性和方法 以及测试xpath 使用方法 scrapy s
  • Python爬虫理论

    目录 1 解析HTML格式 2 解析JSON格式 3 解析二进制格式 4 实战 1 解析HTML格式 解析HTML格式主要有以下几种方法 我们在之后的学习中重点关注前两种 1 lxml库 第三方库 支持HTML和XML格式解析 支持XPat
  • python matplotlib 使用总结

    1 绘制线图 import random import matplotlib pyplot as plt 构造x列表和y列表 x range 100 y random randint 1 10 for i in range 100 plt
  • 为什么晶振处加俩电容?

    晶振是晶体振荡器的简称 在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络 电工学上这个网络有两个谐振点 以频率的高低分其中较低的频率是串联谐振 较高的频率是并联谐振 由于晶体自身的特性致使这两个频率的距离相当的接近 在这个
  • GCC生成静态库.a和动态库.so

    目录 一 静态库和动态库 1 1静态库 1 2动态库 二 GCC生成静态库和动态库 2 1准备过程 2 2静态库的使用 2 3动态库的使用 2 4静态库与动态库的比较 三 库的使用实例 1 代码 2 生成静态库 3 生成动态库 一 静态库和
  • 使用淘宝镜像解决npm下载慢的问题

    由于使用npm下载包的速度会非常慢 所以我们可以使用淘宝镜像来下载 例如下载http server 在后面加上 registry https registry npm taobao org 就会通过淘宝镜像来下载 npm install h
  • Linux报错:OSError: [Errno 28] No space left on device

    Traceback most recent call last File D02 py line 852 in
  • mac 10.13.6 升级至10.14.6再升级至12.4

    mac 10 13 6 升级至10 14 6再升级至12 4 前几天一个月薪35k的兄弟 给我推了一个人工智能学习网站 看了一段时间挺有意思的 包括语音识别 机器翻译等从基础到实战都有 很详细 分享给大家 大家及时保存 说不定啥时候就没了
  • 查看Mysql版本的四种方法

    1 D MySql bin gt mysql V mysql Ver 14 12 Distrib 5 0 51b for Win32 ia32 2 mysql gt status mysql Ver 14 12 Distrib 5 0 51
  • 华为计算机单位换算在哪里,单位换算

    教学目标 1 使学生进一步理解人民币单位间的十进关系 初步掌握基本的单位换算方法 2 通过教学 初步培养学生的动手操作能力和推理能力 3 培养学生的合作意识和应用意识 体验数学的价值 教学重点 初步理解人民币单位之间的换算关系 教学难点 正
  • 关于jquery获取input的value问题

    刚开始接触jquery 很多东西不熟悉 在用 id 来获得页面的input元素的时候 发现 id value不能取到值 后来终于在伟大的百度帮助下 找到了问题的原因 是一个jquery对象 而不是一个dom element value是do
  • Python continue 语句

    Python continue 语句跳出本次循环 而break跳出整个循环 continue 语句用来告诉Python跳过当前循环的剩余语句 然后继续进行下一轮循环 continue语句用在while和for循环中 Python 语言 co
  • 全面解析文件操作~快来深入学习~

    目录 1 为什么使用文件 2 什么是文件 2 1 程序文件 2 2 数据文件 2 3 文件名 3 文件的打开和关闭 3 1 文件指针 3 2 文件的打开和关闭 4 文件的顺序读写 4 1 对比一组函数 5 文件的随机读写 5 1 fseek
  • linux 文件及目录的基本操作

    文件的操作命令 1 显示指定目录和文件 ls eg ls l etc d 2 显示当前目录的名称 pwd eg pwd 3 进入 退出目录 cd eg cd etc 进入根目录下的etc目录 cd 退回到上一级目录 cd 退回到根目录 4
  • Scrum Master 面试题 – 你必须知道的22个Scrum基础知识

    以下的22个问题基本上涵盖了Scrum所涉及的内容 如果你能够正确回答出所有问题 那么你已经具备了作为一名Scrum Master的基本素质 当然 作为一名合格的Scrum Master 更重要的是你的经验 因为Scrum Master更多
  • 尺取法--例题模板详解

    尺取法 一种神奇的技巧 在Codeforces中显示它的算法名称叫做 two pointers 直译成中文的话叫双指针法 尺取法 顾名思义 像尺子一样取一段 尺取法通常是对数组保存一对下标 即所选取的区间的左右端点 然后根据实际情况不断地推