
——线性结构——
线性数据结构
Alex_McAvoy
想要成为渔夫的猎手
展开
-
线性结构 —— 栈与队列
【概述】stack 和 queue 是在程序设计中经常会用到的数据容器,STL提供了方便的堆栈、队列的实现,准确地说,STL 中的 stack 与 queue 不同于 pair、vector 等容器,而是对栈、队列这三个数据结构的重新包装。【stack 的使用】stack 定义在 <stack> 头文件中,其提供了堆栈的全部功能,即实现了先进后出的数据结构。定义:s...原创 2018-12-12 20:22:19 · 648 阅读 · 0 评论 -
线性结构 —— 差分数组
【差分数组】差分数组不仅仅是一个优秀的线性结构,还是一种很好的思想,其主要用于修改区间、查询单点,其中,修改区间的时间复杂度均为O(1),查询单点的时间复杂度为 O(n)对于已知有 n 个元素的离线数列 a,可以建立一个记录它每项与前一项差值的差分数组 f[],那么显然有:f[1]=a[1]-0=a[1] f[i]=a[i]-a[i-1]计算数列各项的值,可以发现:a[2]=...原创 2019-07-30 09:23:49 · 1110 阅读 · 0 评论 -
线性结构 —— 单调栈与单调队列
【单调栈】1.原理单调栈,就是栈内元素保持一定单调性(单调递增或单调递减)的栈,即从栈底到栈顶单调递增或递减。对于单调递增的栈,如果栈为空或入栈元素值大于等于栈顶元素值,则入栈;否则,若入栈会破坏栈的单调性,因此需要将比入栈元素大的元素全部出栈。对于单调递减的栈,如果栈为空或入栈元素值小于等于栈顶元素值,则入栈;否则,若入栈会破坏栈的单调性,因此需要将比入栈元素小的元素全部出栈。...原创 2019-02-10 12:17:31 · 717 阅读 · 0 评论 -
线性结构 —— 前缀和
【概述】前缀和是一种及其优秀的线性结构,也是一种重要的思想,能极大的降低区间查询的时间复杂度。前缀和又分为一维前缀和、二维前缀和,其与差分数组密切相关,关于差分数组:点击这里【一维前缀和】假设有一串长度为 n 的序列,再给出 m 次询问,每次询问给出 L、R 两个数,要求求出区间[L,R] 的和,如果不使用前缀和的话,每次都遍历一遍给出的区间,计算出答案,这样时间复杂度会达到 O...原创 2019-03-24 22:21:59 · 911 阅读 · 1 评论 -
线性结构 —— ST 表与 RMQ
【概述】RMQ(Range Minimum/Maximum Query),是对于长度为 n 的数列 A,回答若干次询问 RMQ(i,j),返回数列 A 中下标在区间 [i,j] 中的最值,即:区间最值查询问题目前常用于解决 RMQ 问题的方法为 ST 算法(Sparse Table),利用 ST 算法预处理打出的表,称为 ST 表。【ST 算法】对于 RMQ 问题,给出 n 个数 ...原创 2019-02-15 18:51:15 · 782 阅读 · 0 评论 -
线性结构 —— 分块算法
【概述】所谓分块,即对于一个长度为 n 的序列,设块的大小为 S,从序列的第一个元素起,每 S 个元素被分成一块,若剩余的元素不足 S 个,令他们组成一块。经过分块后的数组,称为块状数组,在块状数组的基础上加以扩展,即可得到块状链表。在一个区间操作时,完整包含于区间的块称为整块,只有部分包含于区间的块,称为不完整的块,不完整的块实质上行即为区间左右端点所在的两个块。在许多区间问题中,使...原创 2019-07-31 15:49:41 · 617 阅读 · 0 评论 -
线性结构——尺取法
【概述】尺取法,顾名思义,就是像尺子一样一段一段的取,简单来说,尺取法就是返回推进区间开头和结尾,求满足条件的最小区间的方法。一般在以下两种情况使用尺取法:给定一个有序递增数组,在数组中找到满足条件的区间 给定长度为 n 的数列以及整数 s,求出不小于 s 的连续子序列的长度的最小值,即最优连续子序列问题【基本思路】尺取法本质上也是一种模拟,常用于解决寻找区间和问题。假设有...原创 2019-02-17 18:37:15 · 1137 阅读 · 2 评论