前言¶
本文记录本人刷Acwing过程的收获和代码。语言选择C++。
1~1000¶
1~500¶
1~100¶
因为这道题只使用了f[i-1]且j-v[i]<=j,因此可以使用滚动数组优化。
1 |
|
19. 二叉树的下一个节点¶
这题主要想法就是判断当前节点是否拥有右节点。如果拥有右节点,则中序遍历的后一个节点为右节点子树的最左的节点。即,通过右节点循环找到子树的最左的节点;如果没有右节点,则中序遍历的后一个节点为该节点父节点的拐点。即上一次子树的根节点。
1 | class Solution { |
26. 二进制中1的个数¶
1 | class Solution { |
33. 链表中倒数第k个节点¶
本题解题分为两步:
- 计算当前链表长度
- 通过n-k循环找到返回的节点
1 | class Solution { |
35. 反转链表¶
此题有两个版本,一个迭代,一个递归。
迭代版:
1 | class Solution { |
递归版:
1 |
77.翻转单词顺序¶
本题分为二步:
- 首先将整个字符串进行翻转
- 将每个字母进行翻转。此处用双指针算法,设置j获取当前字母长度,进行翻转
1 | class Solution { |
101~200¶
154.滑动窗口¶
本题利用了结果本身的单调性。因为滑动窗口的长度限制,所以使用单调队列而非单调栈。当新元素入队的时候,元素从队尾移除。当新入队元素小于(或大于)等于队尾元素时,将相应元素从队尾出队。生成的单调队列具有单调性,其最值即为队尾或队首元素。
1 |
|
197. 阶乘分解¶
质数定理:不超过x的质数的个数近似为。
底数为10时,对数可简写为。
底数为e时,对数可简写为。
201~300¶
257.关押罪犯¶
1 |
|
301~400¶
401~500¶
501~1000¶
501~600¶
601~700¶
643. 动态网格¶
1 |
|
701~800¶
785. 快速排序¶
1 |
|
786.第k个数¶
1 | /** |
787. 归并排序¶
1 |
|
788.逆序对的数量¶

1 | ``` |
790. 数的三次方根¶
本题需要主要三次方的时候,当数字是0.001之类的小于1的数时,寻找范围需要扩大。
1 |
|
791. 高精度加法¶
这里的选择使用数组存储大整数,这里第0位存个位数,最高位放在数组最后面。这样当发生进位的时候,容易处理。
1 |
|
792. 高精度减法¶
记得去掉结果中多余的0.
1 |
|
793. 高精度乘法¶
1 |
|
794. 高精度除法¶
除法这里需要注意,运算从高位开始处理。所以需要反过来进行处理。
1 |
|
795. 前缀和¶
本题使用的是一维前缀和。注意这里的s数组存放前缀和,相减的时候需要将左边界-1。s[0],a[0]处放0,以便后续操作。
1 |
|
796. 子矩阵的和¶
本题依旧是前缀和,不过是二维前缀和,重点就两个公式。此处假设S为前缀和数组,q为相应的差分数组。
更新前缀和数组:
计算前缀和之差:
1 |
|
797. 差分¶
1 |
|
798. 差分矩阵¶
1 |
|
799. 最长连续不重复子序列¶
1 |
|
801~900¶
801. 二进制中1的个数¶
1 |
|
802. 区间和¶
1 |
|
803. 区间合并¶
1 |
|
823.模拟栈¶
1 |
|
826.单链表¶
本题注意当删除头节点时,需要特判。
1 |
|
827.双链表¶
1 |
|
829.模拟队列¶
1 |
|
830.单调栈¶
本题利用栈的性质
1 |
|
831.KMP字符串¶
1 | . |
835.Trie字符串统计¶
1 |
|
836.合并集合¶
1 |
|
837.连通块中点的数量¶
1 |
|
838.堆排序¶
1 |
|
839. 模拟堆¶
1 | // |
840. 模拟散列表¶
拉链法:
1 |
|
开放寻址法:
1 |
|
841. 字符串哈希¶
1 |
|
843. n-皇后问题¶
1 |
|
844.走迷宫¶
1 |
|
846.树的重心¶
1 |
|
847.图中点的层次¶
1 |
|
848.有向图的拓扑排序¶
1 |
|
849.Dijkstra求最短路¶
1 |
|
850.Dijkstra求最短路¶
1 |
|
851~900¶
[851.spfa求最短路]¶
1 |
|
[852.spfa判断负环]¶
1 |
|
[853.有边数限制的最短路]¶
1 |
|
[854.Floyd求最短路]¶
1 |
|
[858.Prim算法求最小生成树]¶
1 |
|
[859.Kruskal算法求最小生成树]¶
1 |
|
[860.染色法判断二分图]¶
1 |
|
[861.二分图的最大匹配]¶
1 |
|
[866.试除法判定质数]¶
1 |
|
[867.分解质因数]¶
1 |
|
[868.线性法筛质数]¶
1 |
|
[869. 试除法求约数]¶
1 |
|
[870.约数个数]¶
1 |
|
[871.约数之和]¶
1 |
|
[872.最大公约数]¶
1 |
|
[873.欧拉函数]¶
1 |
|
901~1000¶
1001~2000¶
1001~1500¶
1001~1100¶
1076,迷宫问题¶
1 |
|
1101~1200¶
1201~1300¶
1301~1400¶
1381. 阶乘¶
本题重点在于如何获取最后一个非零的数。通过分解质因数可知,这里计算出来的阶乘可以拆分为 ,阶乘中的0就来源于这里的2和5之积,也就是k的数量。
1 |
|
2001~3000¶
3001~4000¶
3001~3500¶
3001~3100¶
3100~3200¶
3192. 出现次数最多的数¶
1 |
|