自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 图论割点割边

1. 割点:如果去掉一个点以及与它连接的边,该点原来所在的图被分成两部分(不连通),则称该点为割点。2. 割边:如果去掉一条边,该边原来所在的图被分成两部分(不连通),则称该点为割边。二,tarjan算法的应用1. 变量说明:① vector<int> edge[1000]; 存储边的信息② bool cut[1000], bridge[1000][1000];cut[x] == true 代表x为割点bridge[x][y]...

2022-08-14 22:29:36 1649 1

原创 前缀和与差分

case 1: 前缀和对于前缀和它的维护的时间复杂度与数据规模有关,但是对于求某个区间的和的操作的时间复杂度却为O(1)一维前缀和: 维护: s[i] = s[i-1] + a[i]求[l, r]区间的和:s[r] - s[l-1]二维前缀和: 维护: s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j]求[x1, y1] 到 [x2, y2]的和: s[x2][y2] - s[x1-1][y2] +...

2022-07-31 20:41:30 86

原创 三分查找与二分查找哪一个更好

三分查找算法问题描述有序数组的元素查找问题代码实现对⽐⼆分和三分查找:static int binarySearch(int arr[], int l, int r, int x){if (r >= l){int mid = l + (r - l)/2;// 先计算中间索引,判断是否恰好是中间值if (arr[mid] == x) return mid;// 左侧查找if (a...

2022-07-25 09:47:54 455

原创 二分查找学习所得

我一开始认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?我们就是要深入细节,比如while循环中的不等号是否应该带等号,mid 是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找算法。一、二分查找的框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid =...

2022-07-18 05:53:45 75

原创 区间dp总结感悟

还是通过一道题总结石子合并题目大意:在一个环上有n个数 ,进行 n-1次合并操作,每次操作将相邻的两堆合并成一堆,能获得新的一堆中的石子数量的和的得分。你需要最大化你的得分。考虑不在环上,而在一条链上的情况。令 表示将区间 内的所有石子合并到一起的最大得分。写出 状态转移方程:令 表示 a 数组的前缀和,状态转移方程变形为 。怎样进行状态转移由于计算 的值时需要知道所有 和 的值,而这两个中包含的元素的数量都小于 ,所以我们以 作为 DP 的阶段。首...

2022-06-19 23:48:27 55

原创 DP思想感悟

线性DP我觉得吧,dp是比其他算法更需要通过更多的题才能学习到精髓,所以这次我打算从好几个题中来总结一下我对线性dp的看法。这些题都是从AcWing题库抽取的数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5我觉得定义这里面很自然地就可以得到递推式...

2022-06-05 22:33:21 114

原创 贪心算法总结

还是通过一道题来总结跳跃问题题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。贪心算法解题分析:这道算法题作为引入,主要体现了贪心算法的最直接的特点——“贪婪”,每一步都选择都选择从当前所在位置出发可以到达的最远距离,如给出一组数据list=[2,3,1,1,4],对于位置0,list[0]=2,即使可以选择跳0,1,2步,但是我们“贪心的”只关注最远的mostlong的值,遍历整个数组,循环

2022-05-29 22:20:31 118

原创 最短路径感悟

一周总结又来了还是通过一道题来总结这周的心程感受题意在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径。因为G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中.

2022-05-22 23:37:28 259

原创 并查集理解与前段时间总结

并查集理解上一周通过题简单的说明了关于并查集的一些小问题,这周我会直接通过通用代码写出我认为并查集的思想和部分问题。学了这么多天并查集后,我觉得并查集的核心就是用集合中的一个元素代表集合。当我们初始化时int pre[N];void Init(){ for(int i = 0; i < N; i++){ pre[i] = i; }}假如有编号为1, 2, 3, ..., n的n个元素,我们用一个数组pre[]来存储每个元素的...

2022-05-15 19:29:59 108

原创 并查集与拓扑排序总结

并查集心程感悟我觉得看了这么多篇关于并查集的博客后,我觉得它的最明显的特征就是并查集有着固定的套路,比如并和查,他都会各自用一个函数来实现,而当你第一次去学习这个实现代码时,你会吐槽“这代码怎么这么难懂”,但是当你看多了之后即使没有提醒你也会知道“哦,这个是并操作,那个是查操作”。还是老样子,我从一个较简单的例题来说明我最近学习并查集的问题。题目若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 规定:x和y是亲戚,y和z是

2022-05-08 17:19:39 148

原创 搜索专题总结

这周做了一部分搜索的题后,我发现这种题看似好像题目都差不多,但是其实写起来有可能有部分不同甚至是大相径庭。所以这周我想通过一道改了两天的题来总结一下。回家小 H 在一个划分成了 n \times mn×m 个方格的长方形封锁线上。 每次他能向上下左右四个方向移动一格(当然小 H 不可以静止不动), 但不能离开封锁线,否则就被打死了。 刚开始时他有满血 66 点,每移动一格他要消耗 11 点血量。一旦小 H 的血量降到 00, 他将死去。 他可以沿路通过拾取鼠标(什么鬼。。。)来补满血量。只要他走到有鼠.

2022-04-27 17:02:18 87

原创 关于搜索和二叉树的技巧认识

搜索的理解这周看的博客中让我印象最深的就是小小的香辛料这位博主的博客,其中,他以一道题解释了三种搜索的实现,分别是递归、深度优先搜索、记忆化搜索,接下来,我也通过这道题来讲一讲我在ac这道题时的困难和感受。先上题有一个层数为n(n<=1000)的数字三角形。现有一只蚂蚁从顶层开始向下走,每走下一级,可向左下方向或右下方向走。求走到底层后它所经过数字的总和的最大值。【输入格式】第一个整数为n,一下n行为各层的数字。【输出格式】一个整数,即最大值。【输入样例 】516 38 2

2022-04-17 19:24:38 617

原创 搜索的认识

我借助老师课件上的一道题来讲一下最近我对深搜的理解#include <iostream>#include <cstdio>using namespace std;#define MAX 1000int val[MAX],weight[MAX],n;int res;/"??void dfs(int nowweight,int nowval,int nowpos){ if(nowpos==n) { if(res<nowval...

2022-04-10 20:08:03 504

原创 阅读五十篇博客总结

1,sortsort是最常见的排序函数,他是一种快速排序,时间复杂度为n*ln2n,比起使用冒泡排序等排序方法效率高,所以在需要压缩时间时应使用sort函数。2,stable_sort这是稳定排序,当我们需要在排序后,相同元素还要保持之前的相对位置,例如,如果我们要从小到大排序几个字符串长度,恰巧有sort跟love两个长度相同,此时他就会按照原来数列的相对顺序排列这两个字符串。3,merge它的时间复杂度和sort一样,但是他能将两个数组合并排序,即同等于当你需要把两个数先将其放入一个数组中然后

2022-04-03 20:11:17 785

原创 【无标题】

deque头文件#include<deque>数据结构支持在两端高效插入或删除元素的连续线性存储空间,可以看作vector和queue的结合体deque支持随机访问,deque在头部增删元素只需要O(1)deque没有容量的概念,随时可以增加并链接一段新的空间迭代器随机访问迭代器,但deque的迭代器不能看作普通的指针,比vector要复杂很多因此应尽可能的使用vector而不是deque声明deque<int>a常用a.push_back()对deque进行

2022-03-27 22:30:26 929

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除