![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
白沐雨
这个作者很懒,什么都没留下…
展开
-
二维数组的前缀和
【代码】二维数组的前缀和。原创 2023-05-30 19:48:00 · 128 阅读 · 0 评论 -
高精度减法
高精度减法模板原创 2023-05-16 20:59:40 · 129 阅读 · 0 评论 -
高精度加法
首先是a[0]+b[0]=3+2+temp=3+2+0;并将结果放入temp中即temp=a[0]+b[0]=3+2+temp=3+2+0;首先是a[1]+b[1]=2+1+temp=2+1+0;并将结果放入temp中即temp=a[1]+b[1]=2+1+temp=2+1+0;然后用结果数组c接收结果的个位c[0]=temp%10,十位向上传递即temp=temp/10;然后用结果数组c接收结果的个位c[0]=temp%10,十位向上传递即temp=temp/10;重复直到每位数都进行了计算;原创 2023-05-16 20:10:17 · 128 阅读 · 0 评论 -
二分查找(2)-右边界
假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。和左边界情况类似,为了当mid等于目标值时保留mid右边的数组,因为右边界不可能在mid左边。因为mid指向目标所以L依旧不动,因此L,R的位置永远不会改变,陷入死循环。当mid=(L+R+1)/2=1时就不会陷入死循环。初始时,L=0,R=1,mid=(L+R)/2=0;如下图情况,数组为A,目标值为0。原创 2023-05-15 19:32:42 · 361 阅读 · 0 评论 -
二分查找(1)-左边界
因为我们找的是左边界,如果等于放在小于时。如下图的边界就在【mid, R】直接查找(错误)因此只能R=mid。因为目标值可能是多个,我们目的是判断边界不是查找值,A[mid]和目标值相等时mid不一定指向左边界。第一次判断如果mid的值大于等于目标值则R=mid,否则L=mid+1;其次二分查找利用有序性质排除不符合数组的一半然后不断逼近正确数组。首先二分查找主要用于有序的数组当中。原创 2023-05-12 21:40:01 · 513 阅读 · 0 评论 -
AcWing - Dijkstra求最短路 II(堆优化Dijkstra&邻接表)
AcWing - Dijkstra求最短路 II(堆优化Dijkstra&邻接表)ityanger 2019-08-16 08:45:28 2250 收藏分类专栏: # 数据结构 # 最短路 ACM题解版权题目链接:https://www.acwing.com/problem/content/852/时/空限制:1s / 64MB题目描述给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1原创 2020-08-27 23:21:20 · 272 阅读 · 0 评论 -
最短路Dijkstra算法
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n≤500,1≤m≤105,图中涉及边长均不超过10000。输入样例:3 31 2 22 3 11 3 4输出样例:3/原创 2020-08-27 08:29:33 · 838 阅读 · 0 评论 -
AcWing 841. 字符串哈希
AcWing 841. 字符串哈希Bryan要加油 2020-08-12 22:19:56 27 收藏分类专栏: AcWing算法基础版权给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整原创 2020-08-21 21:30:38 · 179 阅读 · 0 评论 -
acwingHASH开放寻址法
维护一个集合,支持如下几种操作:“I x”,插入一个数x;“Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。每个结果占一行。数据范围1≤N≤105−109≤x≤109输入样例:5I 1I 2I 3Q 2Q原创 2020-08-21 20:46:30 · 144 阅读 · 0 评论 -
hash ACwing 840 - 模拟散列表(Hash)
维护一个集合,支持如下几种操作:“I x”,插入一个数x;“Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。每个结果占一行。数据范围1≤N≤105−109≤x≤109输入样例:5I 1I 2I 3Q 2Q原创 2020-08-20 23:34:20 · 134 阅读 · 0 评论 -
取反的数和原来的数的关系
背景在内存中数字并不是用源码来储存的而是补码而补码的由来 具体详情点这里补码的计算公式(按位取反)+000000001=它相反数的补码(11111111 - 一个数的补码)+00000001=它相反数的补码所以一个数的取反等于其相反数减一...原创 2020-08-09 21:23:46 · 474 阅读 · 0 评论 -
数组模拟栈和队列模板
队列和栈都是一种数据结构栈是后进先出(可以比作电梯)队列先进先出 (比较排队买东西的队列)下面用数组模拟栈和队列*************************//栈 const int N=10010;int w[N] ,tt=0;//插入w[tt++]=x;//下标从0开始//弹出tt--;//判断是否为空if (tt>=0) not emptyelse empty*****************************//队列int q原创 2020-07-27 23:00:08 · 125 阅读 · 0 评论 -
双链表模板
// e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点int e[N], l[N], r[N], idx;// 初始化void init(){ //0是左端点,1是右端点 r[0] = 1, l[1] = 0; idx = 2;}// 在节点a的右边插入一个数xvoid insert(int a, int x){ e[idx] = x; l[idx] = a, r[idx] = r[a]; l原创 2020-07-27 22:24:22 · 104 阅读 · 0 评论 -
数组表示单链表
单链表实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令可能为以下几种:(原创 2020-07-27 21:13:03 · 561 阅读 · 0 评论