单调栈单调队列+KMP

学习心得

一、单调栈

  1. 应用范围:
    求序列中每一个 数 离它最近的 左/右 边的比它 小/大 的数。

  2. 基本思想:
    类似双指针
    若存在 ax >= ay 且 x<y, 则ax被删除。
    最终序列变为严格单调。
    图1

  3. 解题思路:
    先想暴力做法,再找规律优化

二、单调队列

  1. 应用范围:
    求长度为 n 的滑动窗口 中的最 小/大 值。
    优化多重背包

  2. 基本思想:
    与单调栈类似
    通过删除点使得序列变为严格单调。

  3. 优点:
    时间复杂度从暴力解法的O(n2)降为O(1)
    数组模拟栈队列比STL更快一些,可防止卡常数

三、KMP

  1. 应用范围:
    字符串匹配问题。
  2. 关键点:
    求next数组:next[i] = j

P[1, j] = P[i-j+1, i]

  1. 基本思想:
    以 j 为终点的后缀与前缀相等。
  2. 注意:
    下标从1开始
    next[N] 可能会报错,改为 ne[N] 即可。
  3. 时间复杂度:O(m)

1.6小结

  • 《算法基础课》
    图2
  • AcWing 6题(826-830, 154)
    图3
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值