摘要: 往昔少年时 家中长者常劝诫以万般皆下品,唯有读书高 然懵懂之辈实践浅薄,常怀不识之念 胸无点墨又不耐寒窗苦读 见手不释卷,胸有锦绣者常羡而慕之,乃效仿,却难得其中三昧 于是叹曰,非吾之过,此天赋使然也 遂沉湎与虚无缥缈之梦,蹉跎岁月,虚度年华 今时今日,每念及此,常追悔莫名 人皆恰同学少年,风华正茂 阅读全文
posted @ 2023-10-25 17:37 grave-master 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章水平不够,讲不清楚KMP到底是怎么回事,以后再更新一下。 本篇文章讲述的是KMP算法, 一个著名的字符串匹配算法,效率很高,\(O(n)\) 的时间复杂度。 难点在于:如何理解 \(next[i]\) ★★★ \(ne[i] = j\) 表示,\(p[1 ~ j] = p[i 阅读全文
posted @ 2023-11-30 12:31 grave-master 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章讲述的数据结构是单调队列,主要用于解决 滑动窗口 类问题的数据结构,即,在长度为 \(n\) 的序列中,求每个长度为 \(m\) 的区间的区间最值,时间复杂度 \(O(n)\)。 思路如下: 用一个队列 \(q[N]\) 来存储可能是答案的下标。 先判断是否滑出了窗口,如果滑出 阅读全文
posted @ 2023-11-29 20:25 grave-master 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章讲述的数据结构是单调栈,是一种和单调队列类似的数据结构(下一篇文章会讲到)。 单调队列主要用于 \(O(n)\) 解决滑动窗口问题,单调栈主要用于 \(O(n)\) 解决 NGE问题 (Next Greater Element),也就是对序列中的每个元素,找到上(下)一个比它大 阅读全文
posted @ 2023-11-29 19:24 grave-master 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章讲述的数据结构是,队列,数组模拟队列,也不是循环队列。 队列的结构,完全就是学校食堂排队打饭的那个队列。一个队头,一个队尾,从队头出,从队尾进,排队打饭也是这样hhh。 //用数组模拟的队列定义如下: int hh, tt; int q[N]; /* hh表示队头,tt表示队尾 阅读全文
posted @ 2023-11-27 15:07 grave-master 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 一、题目来源 AcWing算法基础课-3302.表达式求值 二、题目描述 给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 注意: 数据保证给定的表达式合法。 题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)* 阅读全文
posted @ 2023-11-27 13:52 grave-master 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章讲述的数据结构是,栈,数组模拟栈。 栈的结构相信大家应该很清楚了,特点就是先进后出,只能在栈顶操作,栈底不能操作。 //用数组模拟的栈定义如下: int tt; int st[N]; /* tt表示栈顶(我习惯于表示栈顶的下一个位置,可以根据个人习惯来修改) st[N]表示栈 阅读全文
posted @ 2023-11-26 23:02 grave-master 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章讲述的数据结构是双链表,与上一篇文章一样是算法竞赛中常用的用数组模拟的双链表。 //用数组模拟的双链表定义如下: int e[N], l[N], r[N], idx; /* e[i]表示节点i的值 l[i]表示节点i的左边一个节点 r[i]表示节点i的右边一个节点 idx表示当 阅读全文
posted @ 2023-11-26 15:20 grave-master 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章讲述的数据结构是单链表,当然不是常规的单链表,而是算法竞赛中常用的用数组模拟的单链表。 //常规的单链表定义如下: struct { int val; Node *next; } //用数组模拟的单链表定义如下: int head; int e[N], ne[N], idx; 阅读全文
posted @ 2023-11-25 23:10 grave-master 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 一、题目来源 AcWing算法基础课-803.区间合并 二、题目描述 给定 \(n\) 个区间 \([l_i,r_i]\),要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:\([1,3]\) 和 \([2,6]\) 可以合并为一个区间 \([1,6] 阅读全文
posted @ 2023-11-22 18:32 grave-master 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 本篇文章介绍离散化。 什么是离散化? 对于一个数组 \(a\) 来说,他是升序的,其中数字范围很大,例如 \(-10^9\)~\(10^9\)。 但是,数字的个数很少,只有 \(0\)~\(10^5\)。 那么这种情况下就没有必要将数组开得很大从而导致浪费空间,而只需要将每一个数字进行 阅读全文
posted @ 2023-11-22 15:07 grave-master 阅读(33) 评论(0) 推荐(0) 编辑