自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 简历||STAR法则

STAR法则是情境(situation)、目标(target)、行动(action)、结果(result)四项的缩写。STAR法则,即为Situation Target Action Result的缩写,具体含义是:Situation 事情是在什么情况下发生Target你是如何明确你的目标的Action针对这样的情况分析,你采用了什么行动方式Result结果怎样,在这样的情况下你学习到了什么简而言之,STAR法则,就是一种讲述自己故事的方式,或者说,是一个清晰、条理的作文模板。不管是什么,合理熟

2020-06-23 08:47:43 580

原创 学习笔记17||贪心算法

例:区间选点1、将每个区间按照右端点从小到大排序2、从前往后依次枚举每个区间,如果当前区间已经包含点,则直接pass,否则选择当前区间的右端点。

2020-06-01 12:11:10 196

原创 学习笔记16||动态规划DP3

291蒙德里安的猜想求把NM的棋盘分割成若干个12的的长方形,有多少种方案。例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。当横向小矩形的摆放确定之后,整个的方案数就确定了。1、集合的表示:f[i,j]...

2020-06-01 09:03:19 257

原创 学习笔记14||DP2

898 数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;const int N=510,INF=1e9;int f[N][N],a[N][N

2020-05-31 15:57:39 194

原创 学习笔记13||最小生成树+二分图

最小生成树1、prim算法(普利姆)(1) 朴素版prim O(n2)(2) 堆优化版的O(mlogn)2、kruskal算法(卡鲁斯卡尔)稠密图一般用朴素版稀疏图用 kruskal二分图1、染色法O(n+m)2、匈牙利算法O(mn)实际的运行时间远小于O(mn);朴素在当前连通块中距离最近的点。集合外距离最近的点,并且赋值给t,之后用t更新其他点到集合的距离。最后把t加到集合当中去。例题:求最小生成树给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数,求最

2020-05-30 15:17:51 146

原创 学习笔记6||数据结构||kmp算法

kmp问题:首先考虑暴力的方法如何求解。典型问题,最长公共子序列。核心:后缀和前缀相等长度最长是多少暴力算法如图:kmp算法进行分析:kmp核心就是求解next[j],next[j]的含义是在next[j]这个下标之后所构成的后缀,与前缀是相同的#include<iostream>using namespace std;const int N=10010,M=100010;int n,m;char p[N],s[N];int ne[N];int main(){

2020-05-27 16:18:38 163

原创 学习笔记5||数据结构||栈+队列

栈先进后出;#include<iostream>using namespace std;const int N=100010;int stk[N],tt;//插入stk[++tt]=x;//弹出tt--;//判断栈是否为空if(tt>0) not emptyelse empty;//栈顶stk[tt];单调栈常见模型找出每个数左边离它最近的比它大/小的数int tt=0;for(int i=1;i<=n;i++){while(tt&am

2020-05-27 14:42:31 122

原创 学习笔记4||数据结构||链表

链表:1、单链表:邻接表 (存储图和树)2、双链表:优化某些问题单链表:用数组来模拟单链表:指针指向的值的大小:e[N];下个指针:ne[N] (下一个点的位置在什么地方)。均是整数型数组,空指针用-1表示。例:应用:用数组来模拟单链表的实现插入操作1、插入到头节点的位置:将插入数值的下一个指针指向head指向的位置,把head指向当前数值。常用viod add_to_head(int x){ e[idx]=x; ne[idx]=head; head=id

2020-05-27 10:25:03 140

原创 学习笔记2||基础算法||二分

二分整数二分:有单调性的一定可以二分。二分的本质:某个性质可以将区间一分为二,划分图示:圈一寻找的是第一个箭头,即红色线段的右端点。圈二寻找的是第二个箭头,即绿色线段的左端点。问题1、如何选择用哪一个模板:先写mid,在写函数check时,考虑更新的区间,即寻找的到底是左端点还是右端点。问题2、为什么加一为了防止死循环。应用高精度笔试中偶尔出现,面试中不常考...

2020-05-25 20:55:50 215

原创 学习笔记||dp3

count(n,x) 1~n中x出现的次数count(b,x)-count(a-1,x)a~b中x出现的次数即可以设计一个函数,求解。x=1为例:假设n=abcdefg分别求出1在每一位上出现的次数例:1在第4位上出现的次数:1<=xxx1yyy <=abcdefg进行分情况讨论:(1) xxx=000~abc-1 abc*1000(2)xxx=abc d<1,abc1yyy>abc0efg 0d=1,abc1yyy 000~efg efg+1d>

2020-05-25 11:13:51 147

原创 学习笔记12||搜索与图论||最短路

常见最短路问题:1、单源最短路求一个点到其他所有点的最短距离(1) 所有边全都是正数朴素Dijkstra O(n2)堆优化版的Dilkstra算法O(mlogn)(2)存在负权边Bellman-Ford o(mn)SPFA 一般O(m)2、多源汇最短路源即起点,汇点即终点起点与终点都是不确定的Floyd算法O(n3)最短路的核心就是建图,把问题抽象出来。朴素Dijkstra1、初始化:dis[1]=0,dis[i[=+无穷2、确定每个点到起点的最短路si 当前已经确定

2020-05-22 10:41:43 120

原创 学习笔记3||双指针算法的应用

数组元素的目标和给定两个升序排列的有序数组A和B,以及一个目标值x,数组下标从0开始,求出满足A[i]+B[j]=x的数组对数据保证只有一组解双指针算法:首先向暴力怎么做,然后进行优化两重循环,暴力枚举。优化就是基于单调性,#include<iostream>#include<algorithm>using namespace std;const int N=100010;int n,m,x;int a[N],b[N];int main(){ s

2020-05-20 17:35:17 290

原创 学习笔记|做题||数的三次方根+前缀和

数的三次方根属于浮点数的二分法*保留6位小数的话 r-l>1e-8 多2;#include<iostream>using namespace std;int main(){ double x; cin>>x; double l=-10000,r=10000; while(r-l>1e-8){ double mid=(l+r)/2; if(mid*mid*mid>=x) r=m

2020-05-20 15:26:50 301

原创 学习笔记18||数学知识||质数+约数

1、质数:定义:在大于1的自然数(2开始),如果只包含1和本身这两个约数,称为质数或者素数。判定:试除法#inlude<iostream>#inlcude<alogrithm>using namesapce std;bool is_prinme(int n){ if(n<2) reuturn false; for(int i=2;i<n,i++) if(n%i==0) return false; return true;

2020-05-19 10:42:41 151

原创 学习笔记1||基础算法题||快速排序+归并排序

1、第k个数题目描述:长度为n的整数序列,输出第k小的数。思路:先用快速排序进行排序快速排序1、找到分界点x,q[l],q[r],q[l+r>>1]2、划分,左边都小于等于x,右边>=x;3、递归排序左边、右边假设左边区间的长度为s,k<s的话,只递归处理左边即可。同理右边的情况。时间复杂度:快速选择算法为O(N);#include<iostream>using namespace std;const int N=10e5;int q[N

2020-05-18 15:30:43 134

原创 学习笔记11||数据结构||stl

STL综述vector 变长数组,倍增的思想size() 元素个数empty()是否空clear()清空front()//back()push_back()/pop_backbegin().end()[]string 字符串 ,substr( ), c_str( );queue,队列* push(),front(),pop()*priority_queue 优先队列 push(),top(),pop()stack 栈* push(),top(),pop()*deque 双

2020-05-16 11:04:29 126

原创 学习笔记10||数据结构||用数组实现哈希表

哈希表哈希表的存储结构存储结构分为两大类:1、开放寻址法 2、拉链法哈希表的作用:把一个复杂的数据结构映射到0~n。常见情景:把0~ 10e9映射到0~10e5。例题:模拟散列表l x 插入一个数xq x x是否出现过M 0~10e5 N -10e9 ~10e91、x%10e5 可以将数放到10e5之内//取模最好取质数,离2的整数次幂越远越好2、可能存在的冲突,即不同的数字映射到同一个处理冲突:1、拉链法:实现:#include< iostream>#incl

2020-05-15 16:22:25 655

原创 学习笔记9||数据结构||用数组来实现小根堆

用数组来实现堆堆:维护一个数据集合//下标从1开始,比较方便1、插入一个数:heap[++size]=x;up(size);2、求当前集合当中的最小值:heap[1]3、删除最小值:heap[1]=heap[size];size–;down(1);//用最后一个点覆盖第一个,down(stl里的堆同样支持这三个操作)4、删除任意一个元素;heap[k]=heap[size];size–;down(k);up(k);//down,up只会执行其中一个5、修改任意一个元素,heap[k]=x;do

2020-05-14 17:07:03 355

原创 学习笔记8||数据结构||并查集

并查集1、将两个集合合并2、询问两个元素是否在一个集合当中基本原理:每个集合用一棵树来表示,树根的编号就是集合的编号,每个节点存储它的父节点,p[x]表示x的父节点,1、判断树根p[x]==x;2、求x的集合编号:while(p[x]!=x) x=p[x];x不是树根就往上走,直到是树根。3、合并两个集合,把另一个集合变成集合的一个儿子。px是x的集合的编号,py是y的编号,px=y;其中求x的编号的复杂度很高,可以进行优化。在x找到根节点之后,把路径上的所有的节点都直接纸箱根节点,这样的化

2020-05-14 11:40:26 125

原创 学习笔记7||数据结构|用数组实现trie树

trie的作用是快速的查询和存储字符串集合,实现就是根节点之后查询字符有就继续没有就增加。同时标记结尾。实现#include<iostream>using namesapce std;const int N=100010;int son[N][26],cnt[N],idx;char str[N];//插入函数viod insert(char str[ ]){int p=0;for(int i=0;str[i];i++]){//str[]的结尾是/0int u=str[i]-

2020-05-14 10:07:46 243

原创 mark常用c++头文件

常用头文件标准C++#include < algorithm >  //STL 通用算法alogrithm中提供了很多基于迭代器的非成员模板函数,其中常用的有:1、不修改内容的序列操作:count 返回值等价于给定值的元素的个数count_if 返回值满足给定条件的元素的个数equal 返回两个范围是否相等find 返回第一个值等价于给定值的元素find_end 查找范围A中与范围B等价的子范围最后出现的位置find_first_of 查找范围A中第一个与范围B中任

2020-05-12 10:11:42 263

原创 Segmentation Fault

Segmentation Fault最近做题总是会出现Segmentation Fault 的问题,现在将原因进行查找分析。错误的原因:访问的内存超出了系统所给这个程序的内存空间,程序访问不被允许访问的内存区域,或者用错误的类型访问内存区域。可能产生Segmentation Fault 的情况指针越界(1) 错误的访问类型(2) 访问不属于进程地址空间的内存(3) 访问不存在的内存等等DEBUG在关键部分printf或者使用gdb来进行调试。Segmentation Fault 的预防

2020-05-12 08:34:49 172

算法学习笔记.pdf

常用算法整理,包括二分、快速排序、贪心算法、动态规划、二叉树,用数组来实现链表、用数组来实现堆、用栈来实现队列,常用的头文件的整理等。

2020-06-22

空空如也

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

TA关注的人

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