11 2023 档案

摘要:一、算法描述 本篇文章水平不够,讲不清楚KMP到底是怎么回事,以后再更新一下。 本篇文章讲述的是KMP算法, 一个著名的字符串匹配算法,效率很高,O(n) 的时间复杂度。 难点在于:如何理解 next[i] ★★★ ne[i]=j 表示,\(p[1 ~ j] = p[i 阅读全文
posted @ 2023-11-30 12:30 grave-master 阅读(47) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 本篇文章讲述的数据结构是单调队列,主要用于解决 滑动窗口 类问题的数据结构,即,在长度为 n 的序列中,求每个长度为 m 的区间的区间最值,时间复杂度 O(n)。 思路如下: 用一个队列 q[N] 来存储可能是答案的下标。 先判断是否滑出了窗口,如果滑出 阅读全文
posted @ 2023-11-29 20:24 grave-master 阅读(34) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 本篇文章讲述的数据结构是单调栈,是一种和单调队列类似的数据结构(下一篇文章会讲到)。 单调队列主要用于 O(n) 解决滑动窗口问题,单调栈主要用于 O(n) 解决 NGE问题 (Next Greater Element),也就是对序列中的每个元素,找到上(下)一个比它大 阅读全文
posted @ 2023-11-29 19:24 grave-master 阅读(33) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 本篇文章讲述的数据结构是,队列,数组模拟队列,也不是循环队列。 队列的结构,完全就是学校食堂排队打饭的那个队列。一个队头,一个队尾,从队头出,从队尾进,排队打饭也是这样hhh。 //用数组模拟的队列定义如下: int hh, tt; int q[N]; /* hh表示队头,tt表示队尾 阅读全文
posted @ 2023-11-27 15:06 grave-master 阅读(31) 评论(0) 推荐(0) 编辑
摘要:一、题目来源 AcWing算法基础课-3302.表达式求值 二、题目描述 给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 注意: 数据保证给定的表达式合法。 题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)* 阅读全文
posted @ 2023-11-27 13:51 grave-master 阅读(81) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 本篇文章讲述的数据结构是,栈,数组模拟栈。 栈的结构相信大家应该很清楚了,特点就是先进后出,只能在栈顶操作,栈底不能操作。 //用数组模拟的栈定义如下: int tt; int st[N]; /* tt表示栈顶(我习惯于表示栈顶的下一个位置,可以根据个人习惯来修改) st[N]表示栈 阅读全文
posted @ 2023-11-26 23:01 grave-master 阅读(32) 评论(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:19 grave-master 阅读(47) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 本篇文章讲述的数据结构是单链表,当然不是常规的单链表,而是算法竞赛中常用的用数组模拟的单链表。 //常规的单链表定义如下: struct { int val; Node *next; } //用数组模拟的单链表定义如下: int head; int e[N], ne[N], idx; 阅读全文
posted @ 2023-11-25 23:09 grave-master 阅读(29) 评论(0) 推荐(0) 编辑
摘要:一、题目来源 AcWing算法基础课-803.区间合并 二、题目描述 给定 n 个区间 [li,ri],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3][2,6] 可以合并为一个区间 \([1,6] 阅读全文
posted @ 2023-11-22 18:31 grave-master 阅读(78) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 本篇文章介绍离散化。 什么是离散化? 对于一个数组 a 来说,他是升序的,其中数字范围很大,例如 109~109。 但是,数字的个数很少,只有 0~105。 那么这种情况下就没有必要将数组开得很大从而导致浪费空间,而只需要将每一个数字进行 阅读全文
posted @ 2023-11-22 15:07 grave-master 阅读(77) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 本篇文章介绍位运算,直接从用法方面来介绍。 求第 K 位 将第 k 位移到最后面。 &1 即可。 所以操作为:n >> k & 1 求最后一个 1(求 1 的个数) x = 1010...100...0 ~x = 0101...011...1 ~ 阅读全文
posted @ 2023-11-22 14:01 grave-master 阅读(71) 评论(0) 推荐(0) 编辑
摘要:一、题目来源 AcWing算法基础课-2816.判断子序列 二、题目描述 给定一个长度为 n 的整数序列 a1,a2,,an 以及一个长度为 m 的整数序列 b1,b2,,bm。 请你判断 a 序列是否为 b 序列的子序列。 子序列指序 阅读全文
posted @ 2023-11-22 09:04 grave-master 阅读(61) 评论(0) 推荐(0) 编辑
摘要:一、题目来源 AcWing算法基础课-800.数组元素的目标和 二、题目描述 给定两个升序排序的有序数组 AB,以及一个目标值 x。 数组下标从 0 开始。 请你求出满足 A[i]+B[j]=x 的数对 (i,j)。 数据保证有唯一解。 阅读全文
posted @ 2023-11-21 23:00 grave-master 阅读(45) 评论(0) 推荐(0) 编辑
摘要:一、算法描述 含义 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。 另外还可以根据序列进行区分,例如在快排中,双指针指向的是同一个序列,而归并排序中两个指针指向的是两个不同的序列。 怎么用 阅读全文
posted @ 2023-11-21 21:12 grave-master 阅读(123) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示