![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AcWing
文章平均质量分 88
晴空๓
和优秀的人,做有挑战的事!一起加油 (ง •̀o•́)ง (ง •̀o•́)ง
展开
-
试除法求数的约数
从 1 ~ n 依次枚举试除每一个数,判断该数是否可以整除 n,如果可以整除 n,说明该数是 n 的约数。试除法还可以优化一下,即我们可以发现约数都是 成对出现 的,如果 d 可以整除 n,那么 n / d 也可以整除 n。我们假设 d 与 n / d 中 d 是较小的那一个,那么 d原创 2021-04-11 10:54:15 · 481 阅读 · 0 评论 -
分解质因数
把一个合数用质因数相乘的形式表示出来,叫做分解质因数。分解质因数可以使用 试除法 来分解,即从小到大枚举每一个数 d,如果 d 可以整除 n,则从 n 中除掉所有的因子 d,同时累计除去 d 的个数。通过唯一分解定理,可以知道一个合数的因子一定在扫描到这个合数之前就被其更小的质因子 d 除掉了,所以能整除 n 的一定是质数。原创 2021-04-03 17:08:12 · 7558 阅读 · 1 评论 -
AcWing 90. 64位整数乘法(位运算)
求 a 乘 b 对 p 取模的值。原创 2021-03-23 21:16:58 · 228 阅读 · 0 评论 -
AcWing 89. a^b(快速幂)
快速幂就是快速算底数的 n 次幂。其时间复杂度为 O(log₂N), 与朴素的 O(N) 相比效率有了极大的提高。原创 2021-03-23 15:26:26 · 311 阅读 · 0 评论 -
堆优化版Dijkstra算法
上一篇博客提到的 朴素Dijkstra算法 适用于求 稠密图 的最短路问题,因为 稠密图 的边数远远大于点数,朴素Dijkstra算法的思路为进行 n 次循环,每次循环再遍历 n 个点确定一个还未确定最短距离的点中距离源点最近距离的点,然后再用这个点更新其所能到达的点(算法默认当前的点可以到达所有的点,因为没有到达的点之间的距离都已经初始化为正无穷大,所以不会被更新,不影响结果)。时间复杂度为 O(n2)。原创 2021-03-09 00:00:20 · 9005 阅读 · 7 评论 -
朴素Dijkstra算法
Dijkstra 算法用来求 所有边权都是正数 的 单源最短路 。边权 即两个点之间的距离;单源 即只求从源点(起点,终点也称为汇点)到其他点的最短距离;朴素Dijkstra 算法适用于求 稠密图 的最短距离问题。稠密图是指边数有很多的图,假设 n 为图的点数, m 为图的边数,那么一般当 m = n2 时该图为稠密图。朴素Dijkstra 算法的时间复杂度为 O(n2)。原创 2021-03-04 22:50:24 · 1471 阅读 · 1 评论 -
通俗易懂的字符串哈希算法,你确定不来看一下吗?
字符串哈希 也叫做 字符串前缀哈希法 就是将预先一个字符串的每一个前缀都映射成一个 哈希值,当需要判断两个 子字符串 是否一样时,只需要判断这两个子字符串的哈希值是否相同就可以了。这样就可以通过 O(n) 的时间预处理字符串所有前缀 Hash 并在 O(1) 的时间内查询它的任意子串的 Hash 值。原创 2021-02-27 22:42:49 · 590 阅读 · 4 评论 -
哈希表
哈希表(Hash Table),又叫散列表,是能够通过给定的关键字的值直接访问到具体对应的值的一个数据结构。也就是说,把关键字映射到一个表中的位置来直接访问记录,以加快访问速度。原创 2021-02-18 19:15:45 · 852 阅读 · 29 评论 -
静态链表的介绍及实现
用数组描述的单链表叫做静态链表,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版。使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)维持(和链表类似)。原创 2021-02-17 22:20:01 · 819 阅读 · 0 评论 -
并查集详解
并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。原创 2021-02-15 22:56:07 · 3166 阅读 · 11 评论 -
Trie树简介及其应用
Trie树又称字典树、前缀树、单词查找树等等。是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。原创 2021-02-12 16:36:42 · 1021 阅读 · 0 评论 -
AcWing 600. 仰视奶牛(单调栈)
约翰有N头奶牛,编号为1到N。现在这N头奶牛按编号从小到大的顺序站成了一排,其中奶牛 i 的身高为Hi。现在,每头奶牛都向它的右侧望向那些编号较大的奶牛,对于奶牛 i 如果存在一头奶牛 j 满足 i<j 并且 Hi<Hj,那么我们称奶牛 i 需要仰视奶牛 j。请你求出每头奶牛的最近仰视对象。原创 2021-02-03 20:38:06 · 202 阅读 · 0 评论 -
AcWing 830. 单调栈
给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。原创 2021-01-30 16:17:42 · 801 阅读 · 2 评论 -
AcWing 42. 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。注意:若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空,则视为是一个栈的压入、弹出序列。原创 2021-01-26 20:58:34 · 171 阅读 · 0 评论 -
AcWing 41. 包含min函数的栈
设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。push(x)–将元素x插入栈中pop()–移除栈顶元素top()–得到栈顶元素getMin()–得到栈中最小元素原创 2021-01-26 19:02:39 · 165 阅读 · 0 评论 -
AcWing 20. 用两个栈实现队列
请用栈实现一个队列,支持如下四种操作:push(x) – 将元素x插到队尾;pop() – 将队首的元素弹出,并返回该元素;peek() – 返回队首元素;empty() – 返回队列是否为空;原创 2021-01-25 21:35:49 · 178 阅读 · 0 评论 -
AcWing 756. 蛇形矩阵
输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。原创 2021-01-18 11:12:19 · 214 阅读 · 0 评论 -
AcWing 1113. 红与黑(BFS、DFS)
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。原创 2021-01-14 21:03:57 · 404 阅读 · 2 评论