尺取法 学习笔记

这篇具有很好参考价值的文章主要介绍了尺取法 学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本技巧——尺取法 学习笔记

算法简介

尺取法,简单来说是一种利用[双指针法]遍历满足条件的[区间]的算法。

其算法思想为:对数组保存⼀对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。

尺取法不会去枚举到一定不满足条件的区间,所以是一种[⾼效的枚举区间的⽅法]。

朴素算法

先考虑朴素算法:

  1. 暴力 \(O(n^2)\):对于每一个 \(l\) 指针,枚举 \(r\) 指针。
  2. 二分 \(O(n \log n)\):对于每一个 \(l\) 指针,二分 \(r\) 指针。

其中 \(1\) 可以解决[无单调性的问题];而 \(2\) 需要保证单调性,可以通过大部分的题目;
但是对于部分 \(n \le 10^6\) 的题目,需要[线性复杂度]的算法,就可以考虑[尺取法]。

尺取法

适用情况

⼀般⽤于求取[有⼀定限制的区间]个数或最短的区间问题。

使用限制

  1. 所求解的答案在区间内连续;
  2. 区间权值大小满足随区间长度单调变化,即区间越长区间权值不递减或不递增;
  3. 在通过判断之后,区间的移动有明确的方向。

时间复杂度

常常可以将时间复杂度从 \(O(n^2)\)\(O(n \log n)\) 优化为 \(O(n)\)

实现细节

  1. 申请两个指针 \(l\)\(r\),表示考虑区间 \([l, r]\) 的结果;
  2. 固定 \(l\),使 \(r\) 不断递增直至满足条件(或超出限制);
  3. 在满足条件(或最后一个未超出限制)的位置更新答案;
  4. 保持 \(r\) 不变,使 \(l\) 增加一直至不满足条件(或未超出限制);
  5. 回到 \((2) \texttt{ } \operatorname{if} \cancel{\text{e}} \text{nd}.\)

Reference

[1] https://www.jianshu.com/p/252b8c20f91c
[2] https://blog.csdn.net/Zhengyangxinn/article/details/104657145
[3] https://www.luogu.com.cn/blog/Nero-Yuzurizaki/chi-qu-fa-xiao-jie
[4] https://www.luogu.com.cn/blog/kkkZzBin0160ZSHS/chi-qu-fa
[5] https://www.luogu.com.cn/blog/SingerCoder/dp-chi-qu-fa
[6] https://www.luogu.com.cn/blog/3334SLTH/chi-qu-fa
[7] https://www.luogu.com.cn/blog/Lucasmjx/chi-qu-fa文章来源地址https://www.toymoban.com/news/detail-709907.html

到了这里,关于尺取法 学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PS CS6视频剪辑基本技巧(二)视频剪接和添加图片

    系列讲座导读 PS CS6视频剪辑基本技巧(一)CS6可以实现的视频剪辑功能 PS CS6视频剪辑基本技巧(二)视频剪接和添加图片 PS CS6视频剪辑基本技巧(三)添加声音和字幕 PS CS6视频剪辑基本技巧(四)字幕居中和滚动字幕 PS CS6视频剪辑基本技巧(五)添加logo、动画和画中画

    2023年04月15日
    浏览(61)
  • 异或运算的基本介绍以及使用技巧,剖析常见的异或题目

    异或运算,符号为‘^’,直接对底层二进制串进行运算,比算术运算快得多,规则为:相同为0,不同为1。 假设N为任意实数 性质1:0 ^ N = N 性质2:N ^ N = 0 性质3:异或运算满足交换律与结合律 重点:我们可以将异或运算理解为二进制的无进位相加!也就是说,当两个数异或

    2024年02月08日
    浏览(46)
  • 【Python beautifulsoup】详细介绍beautifulsoup库的使用方法,包括安装方式、基本用法、常用方法和技巧,以及结合lxml和parsel的具体使用场景和区别。

    Python beautifulsoup库是一个强大的Web抓取和解析库,它提供了丰富的功能和简单易用的API,可以帮助我们处理HTML和XML文档,从中提取数据,进行数据清洗和处理。beautifulsoup库基于Python标准库中的html.parser模块,同时还可以与第三方解析库lxml和parsel配合使用,提供更高效和灵活的

    2024年02月04日
    浏览(60)
  • 尺取法 学习笔记

    尺取法,简单来说是一种利用 双指针法 遍历满足条件的 区间 的算法。 其算法思想为:对数组保存⼀对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。 尺取法不会去枚举到一定不满足条件的区间,所以是一种 ⾼效的枚举

    2024年02月08日
    浏览(38)
  • 【002JavaScript 类继承】基本继承、调用父类方法和混入模式等方面的知识。掌握类继承的概念和技巧,提升代码的灵活性和可维护性。

    在 JavaScript 中,类继承是实现代码复用和扩展的重要概念。通过继承,我们可以基于现有类创建新类,并继承父类的属性和方法。本文将详细介绍 JavaScript 类继承的各个方面和技巧。 使用 extends 可以实现基本的类继承。 } class Dog extends Animal { bark() { console.log( ${this.nam

    2024年02月08日
    浏览(59)
  • Unity学习笔记——ScrollView常用技巧

    在学习UI过程中反复接触ScrollView,遇到了很多使用问题,有许多技巧需要记录下来 如果不使用横向滑动,只需要将ScrollView中的Horizontal取消即可,虽然在Unity视图中还会存在,但运行游戏后就会消失;纵向滑动条同理 另外,如果你的Content的范围设置太小,也是不会显示滑动条

    2024年02月09日
    浏览(51)
  • FPGA 学习笔记:Vivado 工程管理技巧

    当前使用 Xilinx 的 FPGA,所以需要熟悉 Xilinx FPGA 的 开发利器 Vivado 的工程管理方法 这里初步列举一些实际 Xilinx FPGA 开发基于 Vivado 的项目使用到的工程的管理技巧 做过嵌入式软件或者其他软件开发的工程技术人员,都会想到使用代码管理工具,如 SVN 、Git 等对代码进行管理

    2024年02月09日
    浏览(37)
  • 使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记

    前段时间在 DeepLearning 学了一门大火的 Prompt 的课程,吴恩达本人授课,讲的通俗易懂,感觉受益匪浅,因此在这里总结分享一下我的学习笔记。 为什么要学习 Prompt ? 因为在未来的 AIGC 年代,学习有效的 Promot 提示词有效的利用 AI 来完成一些重复性的工作。这也我认为未来

    2024年02月07日
    浏览(48)
  • 【kali学习笔记】信息收集之搜索引擎的使用技巧

    一、Google 搜索引擎的使用技巧 1、Google 常用语法说明 site 指定域名 inurl URL 中存在的页面 intext 网页内容里面的 Filetype 指定文件类型 intitle 网页标题中的 link 返回你所有的指定域名链接 info 查找指定站点信息 cache 搜索 Google 里的内容缓存 2、技巧 技巧 1:

    2024年02月05日
    浏览(49)
  • 【学习笔记】软考中级【数据库系统工程师】下午题技巧

    数据库系统工程师下午的《应用技术》有5个大题,每题15分,总分75,一般45及格。 (我的成绩已经出来啦!上午题60,下午题69!) 近年题型: 题型 数据流图 E-R图 关系规范化 SQL 两段锁协议 数据库恢复 2017 √ √ √ √ √ 2018 √ √ √ √ √ 2019 √ √ √ √ √ 2020 √ √ √

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包