自定义博客皮肤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)
  • 收藏
  • 关注

原创 最短路径算法(单源)

能够处理存在负边权的情况。算法时间复杂度:(NM),N是顶点数,M是边数。算法实现:设s为起点,dis[v]即为s到v的最短距离,pre[w]为v前驱。w是边j的长度,且i连接u、v。初始化:dis[s]=0,dis[v]=∞(v≠s),pre[s]=0for(i=1;i<=n-1;j<=M:j++)//注意要枚举所有边,不能枚举点。//u[j]、[v]分别是这条边连接的两个起点与终点。//疏通路径。

2024-02-23 22:48:20 168

原创 学学学学学

主要有一个边数组和一个头数组(最近一次输入的以i为起点在边数组中的下标)组成。

2024-02-22 23:51:04 198

原创 c语言学习

(1)储存方式有两种:大根堆储存,小根堆储存大根堆根节点总是比左右子节点大;小根堆总是比左右子节点小;堆的储存是以层序储存的方式进行,储存在数组中。(2)创建思路:就是以顺序排序的方式将元素,以数组下标为基础实现成一颗二叉树。母节点和子节点的关系:从下标0开始如果母节点为i左子节点下标为2i+1,右子节点下标为2i+2;自主实现优先队列时除了将元素排列有序,还有几种操作即插入和删除;(3)代码实现操作默认为大根堆。

2024-02-21 22:30:52 171

原创 c语言学习

floyed算法思维:如果想要任意两点之间的路程变短,只能引入第三个点·,通过这个点进行中转,才能缩短原来两点的路程,有的时候还不只一个中转点。这时候如果再把经过1中转的点作为中转点就可以直接用最短路径了;所以需要把所有点都作为中转点就可更新完所有的最短路径;

2024-02-20 23:51:00 231 1

原创 c语言学习——二分法练习题

二分法找到可以满足分给每人一块的最大值。

2024-02-19 23:08:10 249 1

原创 寒假快乐学习之——树

后序的话只需要把放左右的顺序颠倒再反转数组就行,也可以用两个栈。后序和中序只需要更换遍历和存放数的顺序;用栈实现遍历,也是递归的底层逻辑;

2024-02-18 23:07:28 168

原创 寒假c语言练习题

一个背包和并查集结合的题目,把需要一起购买的东西绑在一起,后面用01背包求出最大的价值。

2024-02-16 23:12:07 229 1

原创 寒假c语言学习

操作一:初始化用一个数组fa【】来储存每个元素的父节点,一开始将所有的元素的父节点设置为自己。操作二:查询找父节点的父节点的......也就是祖先。操作三:合并。

2024-02-15 23:40:02 331 1

原创 寒假C语言学习

所以要用主角背包,一个是一种物品只能放一次的01背包,一种是一种物品可以无限放的完全背包,01背包可以考虑使用二维数组,和一维数组。二维数组的使用没太多讲究,可以先遍历物品也可以先遍历背包,可以倒序也可以正序,而一维数组的使用就用限制毕竟使用了更少的空间,就需要考虑到顺序。如果是完全背包(一种物品无限制次数放)则将01背包的遍历方向倒过来,改成正序,这样就可以再前面放过该物品的基础上再次放置,而倒叙的时候前面是没有放该物品的状态所以一种物品只能够放一次,这是01背包和完全背包的不同之处。

2024-02-14 23:40:29 128 1

原创 寒假c语言学习

将当前点作为正方形的右下角点,判断它可以扩展成边长为多大的点,找到最大正方形。此时需要判断它的上方,左方和左上方最多可以延申多长,则该点作为右下角的最大正方形边长为这三个方向的最小值加一。

2024-02-09 00:19:19 318 1

原创 寒假学习c语言

m>n时:f(m,n)=f(m-n,n)+f(m,n-1);(一种是所有盘子都有放,这种放法相当于先在所有盘子上放一个,然后计算m-n个放在n个盘子上的总数,另一种是选择一个盘子不放,然后计算m个放在n-1个盘子上)思路:遍历计算前缀的和,如果当前遍历的值大于现在的前缀和就放弃前面的数把当前遍历的值作为前缀和计算的开始,每次遍历更新当前的最大值即可。假设f(m,n)表示有m个苹果放到n个盘子上,则有两种情况,m<n此时:f(m,n)=f(m,m);使用递归依次计算到f(m,n)。

2024-02-08 00:35:17 341

原创 寒假之——我爱学习

首先是判断,可以观察到只有RC的格式数字后面会出现字母,excel格式是没有的。抓这一条件判断即可。接下来就是得到一个可行的分配时间,先将最小的时间满足,再将多出来的时间分配到每一天。解决这个题,就是解决两个问题,先判断输入的格式是哪一种,再就是转换成另外一个格式,先判断能否将时间分配到每一天,只需要总时间在最小时间之和跟最大时间之和之间即可。格式的转化,在进行26进制和10进制的转换后得到行和列的数。

2024-02-02 23:18:53 207

原创 寒假艰难学习

题目表述有两个脑子可以用,可以设定一个脑子(左)用时少于等于另一个脑子(右)的用时,怎样都可以只是方便理解,求最短时间需要将左脑最大化使用,当左脑解决的问题的时间的总和最接近所有题目时间总和的一半时此时右脑所花费的时间就是最短时间。一个n×n棋盘上放置n个皇后使他们互相都不攻击,从第一行开始每一行放置的一个皇后需要搜索到一个该列和两条45度斜线上都没有其他的皇后的位置。转换为背包问题就是一个容量等于加值的问题,只要尽可能的装满背包即可。

2024-02-01 23:36:17 176 1

原创 搜索基础练习题

将每一个地方都作为搜索的开始(因为高手有时光机)可以想象成一个图表(行列都是1到n)搜索,从左到右搜索可以去的地方,将去过的地方标记,再下一个地方从头到尾搜索即可。明目张胆的搜索题目,把每层搜索的值都相加,当等于目标值就收集输出结果。每次搜索接着上一个数开始都从一开始会重复。数学全排列,搜索(dfs)的入门模板,

2024-02-01 00:11:38 216 1

原创 栈栈栈栈栈

学习单调栈!不管是单调栈还是队列,思路大致相同,就是将即将进来的数与最后进的数进行比较来维护一最大或最小值,不过用处不同,单调栈一般用来找一个数的左边或者右边的第一个比它大或者比它小的数。该题需要找到右边第一个比它大的数的序号。所以我们可以用栈来存放每个数的序号,这样既有序号又可以访问数值,不用再消耗空间。

2024-01-30 23:13:02 108 1

原创 寒假艰苦学习

寻找三数之和:大体思路,先将所有的数都进行排序,我们定义一个left指针和一个right指针两个指针来寻找当用i遍历数组的另外两个数left在i的后一个,right在末尾,当当前的总和大于目标值的时候我们就需要缩小当前值,也就是将right减减(因为数据已经排好序了),小于目标值就left加加。在这个题中去掉重复的是很重要的步骤,也就是寻找到结果后继续寻找其他结果是不能出现一样的,这样我们就需要在找到一个结果时立即进行去重操作。

2024-01-29 23:13:11 135

原创 寒假艰苦学习

定义一个快指针和一个慢指针,看他们是否会相遇,相遇表示一定有环,平直的链表不同速度的指针一定是不会相遇的,而再环中速度不同的指针则一定相遇。相当于在相遇点和链表头定义一个速度相同的指针,在相遇点的指针在经过转的圈数减一加上z的路程后会和在链表头开始的指针会相遇在链表的入口。则有:2(x+y)=x+y+n(y+z)这里只有只有快指针的路程加上n(y+z)因为慢指针在第二圈前一定会被追上。假设链表头距离入口x,入口到相遇点的距离为y,相遇点到入口为z。变形:x=(n-1)(y+z)+z。需先记录下相遇的位置。

2024-01-28 23:12:51 219

原创 日常训练题(队列)

题目很清楚,我们要用到滑动窗口和单调队列。大概思路就是放数然后取得窗口内的最大值或最小值。滑动窗口就很简单了就是一个弹出和放入的过程,让窗口内的数一直保持一个特定长度。单调队列才是此题重点,就是每放入一个数时我们需要检查队列中即将放入位置的前一个是否小于该数,如果小于我们就对前一个数进行删除将tail减减。这是窗口内最大值,最小值则相反。有了这个操作后队列的出口一定存放的是窗口内的最大值在获取最大值的时候直接获取即可。

2024-01-26 23:06:51 110 1

原创 链表表表表

需要稍加变通,如果直接反转结点的指针方向后,会发现丢失了原来的地址,所有我们需要一个临时进行储存。我们需要返回的时pre(一开始的NULL)因为最后的p会时NULL。只能写写简单题了甚至栈都用不到。p1739 括号匹配。

2024-01-25 23:31:42 94

原创 链表必会操作

节点:就是一个特殊的结构体,有两部分组成,一部分是数据域(该结点数据),另一部分是指针域(下一结点的首地址);不管是删除还是插入我们都需要找到操作位置的前一个结点,可访问下一个结点。链表的基本操作有:创建链表、查找、插入、删除和修改等。这里需要返回xp->next因为头结点可能被删除。删除第n个节点可参考这两个。

2024-01-24 23:49:33 379

原创 匹配字符串(继)

那么为什么可以返回到next[j-1]是理解KMP算法的关键所在,因为如果遇到不匹配的那个字符的前一个有数值的话说明字串前面有相同的前缀,这时已经和母串匹配过了所以可以直接从相同前缀的下一个开始,刚好就是前缀表数值对应的数组下标。这时失败后字串指标回退的位置就很讲究了,我们需要用到叫前缀表的next[ ]数组存放前后缀相等的最大长度。算法核心是利用匹配失败后的信息,尽量减少子串与母串的匹配次数来达到快速匹配的目的。当匹配失败时j返回到next[j-1]也就是上一个字符对应的前缀表的数值。

2024-01-23 23:38:21 365

原创 字符串匹配

例如,将子串看做一个进制数,比较它的值与母串中相同长度子串的hash值,如果相同,再细致地按字符确认字符串是否确实相同。顺序计算母串hash值的过程中,使用增量计算的方法类似滑动窗口:扣除最高位的hash值,增加最低位的hash值。#define PRIME 101//数值可以不同且哈希函数不唯一,深入知识我也不是很明白 0.0。很容易想到,也比较简单的方法就是遍历字符串,将每个字母作为起始字符判断是否匹配。return i+1;Rabin-Karp 算法。

2024-01-22 23:22:47 361 1

空空如也

空空如也

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

TA关注的人

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