- 博客(10)
- 资源 (1)
- 收藏
- 关注
原创 C++刷题笔记(六)——二分模板/快速幂/欧几里得
二分的本质是「二段性」而非「单调性」,而经过本题,我们进一步发现「二段性」还能继续细分,不仅仅只有满足 01 特性(满足/不满足)的「二段性」可以使用二分,满足 1?依然着眼于某个上升子序列的 结尾的元素,如果 已经得到的上升子序列的结尾的数越小,那么遍历的时候后面接上一个数,会有更大的可能构成一个长度更长的上升子序列。经过旋转的数组,显然前半段满足 >= nums[0],而后半段不满足 >= nums[0]。以下模板中的,寻找第一个 >= x 的数,即是在寻找 重复 x 的 区间的左边界。
2023-08-15 16:54:47
541
2
原创 C++刷题周记(五)——并查集/最小生成树(Prim/Kruskal)
距离dis设成∞ ,每次找到距离最小的点t 加入路径中 修改状态,并用该点距离进行松弛操作,更新所有点到起点距离 dis[i]=min(dis[i],w+g[t][i]);的距离dis设成∞ ,每次找到距离最小的点t,加入到连通集合中,并用该点距离进行松弛操作,更新所有点到集合距离 dis[i]=min(dis[i],g[t][i])的距离dis设成∞ ,每次找到距离最小的点,加入到连通集合中,并用该点距离进行松弛操作,更新所有点到集合距离 dis[i]=min(dis[i],g[t][i])
2023-05-17 15:07:06
410
1
原创 C++刷题周记(四)——最短路问题
dijkstra算法是基于贪心的思想,每次选择至起点距离最近的点,去更新与其相邻的点,之后不再访问,不会回头。dijkstra算法是基于贪心的思想,每次选择至起点距离最近的点,去更新与其相邻的点,之后不再访问,不会回头。而spfa算法,只要有某个点的距离被更新了,就把它加到队列中,去更新其它点,每个点都有被重复加入队列的可能(即可以回头),所以。同时也可以存在负权回路,因为它求得的最短路是有限制的,是限制了边数的,这样不会永久的走下去,会得到一个解;比如第一次遍历,只有第一个点的临边是有效的。
2023-05-16 11:21:07
289
1
原创 C++刷题周记(番外篇)——单调栈模板
单调栈实际上只有两类问题:求一个数左边第一个小于他的数/求一个数右边第一个大于他的数。以上归根结底也是同一问题,所以我们可以使用统一模板解决
2023-05-09 20:12:35
292
原创 C++刷题周记(一)
把C++重拾起来系统刷题的第一周(4.16-4.23),也是同时为了复习数据结构与准备夏令营机试。计划着主要是结合Acwing算法基础课的章节进行,同时也会穿插二刷之前用Java刷过的力扣题。
2023-04-23 12:21:58
266
1
原创 二叉树中的回溯思想——Leetcode257/513/112/113
在二叉树中,和遍历结点相关的题其实都是更优先使用递归法的,因为递归法是与二叉树性质非常吻合的一种思想。其他的如迭代遍历法、层序遍历法模板化较强(过会儿再将模板进行总结),但是灵活性和便捷性就大打折扣了。但初期,我对于递归还是不太熟练,具体表现在看代码觉得非常简单,自己一写就被绕进了逻辑的弯绕之中。每次写递归之前,要明确递归的三部曲:1.明确递归函数的返回值和参数2.明确终止条件3.明确单层递归的逻辑明确以上三部曲之后,递归就变得清晰许多了。而递归中往往是隐藏着回溯思想的,废话先打住,
2022-03-12 14:14:14
1203
原创 双指针法小结 --以LeetCode 27、977、15、18为例
初刷力扣,还是先从基础的做起,而双指针法在基础题中的应用非常广泛。LeetCode 27、977、15、18就是我这几天所做到的可以用双指针法很好解决的题目:相当于把数组分为两部分:前一部分为有效部分,不等于val的数,后一部分为无效部分,即等于val的数,最后返回前一部分的长度,直接上代码:class Solution { public int removeElement(int[] nums, int val) { int j = nums.length - 1
2022-03-05 20:40:09
110
合肥工业大学数据库课程设计-建材物资管理信息系统
2022-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人