▎引入

☞『例题』

  一道十分easy的题:

  洛谷P1638

长度为n的序列,m种数 找一个最短区间,使得所有数出现一遍 n≤1e6 ,m≤2e3。

☞『分析』

  这道题非常的简单,但是如果不会two-pointer的话就很费劲了,我们一定会首先想到动态规划,或者直接上暴力,时间复杂度绝对不能在这么大的数据规模下接受。

  那么two-pointer是什么?

  正如其名,有两个指针,注意:此指针非彼指针,可不是C++中的指针,所以不必担心,并不难,非常easy。

  两个指针分别是头指针l和尾指针r,这样这道题的算法就很清晰了:当区间[l,r]中的数都出现过一次时,那么就头指针l++,同时更新答案,否则尾指针r++。

  总的算法时间复杂度是O(n),也是相当快了。

▎two-pointer(尺取法)

☞『定义』

  two-pointer英文直译过来叫做双指针法,意译过来叫尺取法,(小编不了解为什么叫尺取法,觉得叫two-pointer就挺舒服的,所以下文会一直叫英文名称)。

  尺取法是一种比较基础的算法,一般用来解决具有单调性的区间问题. 不过,一般满足单调性的问题二分也可以做到,所以往往two-pointer能解决的题二分也可以做到。

☞『two-pointer的用处』

  two-pointer通常只起到辅助或优化的作用。

  其实我们或多或少已经接触过two-pointer了,只不过你不知道它叫什么名字,所以这篇博客中的two-pointer部分只是莫队的垫脚石。

▎莫队

☞『引入』

  莫队几乎就是two-pointer,只是处理的问题不太一样。废话不多说,直接先上一道题:

  洛谷P1494

长度为n的序列,每个点有点权c,m次询问 每次询问一个区间内,随机取两个数相等的概率 m,n,c≤5e4

  一般莫队就是处理这样的查询多次区间的问题。(有兴趣可以做一做)

☞『定义』

  莫队算法主要是用于解决不带修改只有查询的一类区间问题。

☞『算法思想核心』

  比方说当前有一个大区间(也就是数列),还有若干查询的区间

  

  假设我们已经知道一个区间[l,r]的答案是多少。

  

  那么我们就可以轻易扩展:

  

  我们就可以用极少的时间O(x)知道[l,r+1],[l,r-1],[l-1,r],[l+1,r]的答案,以此来暴力扩展至下一个询问区间,就能知道它的答案了。

  所以这是极其暴力的。

☞『为什么说它是优雅的暴力』

  这个算法时间复杂度是O(n√nx),最坏也不会到达O(n2),因此,尽管暴力,也很优雅。

最新文章

  1. [WPF]TextTrimming截断后,ToolTip显示完整信息
  2. Shell中的空格和引号
  3. [js开源组件开发]localStorage-cache本地存储的缓存管理
  4. Lua 之数据结构
  5. date +%s 能打印出自1970-01-01 00:00:00到当前时间的秒数
  6. BeautifulSoup 安装使用
  7. 在VMware 虚拟机中配置 windows2003系统的NLB负载均衡;0x800706D5错误的解决方法;没有接口可用于安装新的群集
  8. hdu 2027 统计元音
  9. WPF的依赖属性
  10. [Locked] One Edit Distance
  11. 数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
  12. Android OpenGL ES 开发(三): OpenGL ES 定义形状
  13. 【构造】UVa 11387 The 3-Regular Graph
  14. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增锁定用户与解除锁定用户的功能
  15. struct2depth 记录
  16. ELKStack的基础入门和中文指南
  17. [SoapUI] 从Map里面不想要的键值对
  18. ASP.NET WebAPI Bearer Authorization
  19. SpringBoot入门 (十四) Security安全控制
  20. maven设计思想

热门文章

  1. C++语法小记---抽象类和接口
  2. C++语法小记---同名覆盖
  3. Docker 入门教程(3)——Dockerfile
  4. ST表解决RMQ问题
  5. three.js 欧拉角和四元数
  6. Mysql 的数据导入导出
  7. Android Zero (开篇)
  8. Python List sort()方法
  9. PHP unset() 函数
  10. PHP pack() 函数