自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python双指针

双指针:在区间操作时,利用两个下标同时遍历,进行高效操作。当移动到尾部则停止,或满足特殊条件时停止。= 终点,不断往左走,直至相交则停止。区间中的信息:区间和、各个元素个数等。一般用于有序数组或者字符串类问题。双指针利用区间性质可以把。= 起点,不断往右走,

2025-01-12 22:01:10 975 1

原创 Python贪心

为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。每次谈判,小蓝只能邀请两个部落参加,花费的金币数量为两个部落的人数之和,谈判的效果是两个部落联合成一个部落(人数为原来两个部落的人数之和)。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

2025-01-12 21:48:50 2957

原创 Python离散化

离散化:不关注数字本身,只关注大小关系时,利用排名代替原数据。,将离散的数字、浮点数,转换成。的题目,均可以先离散化。

2025-01-12 20:07:57 451

原创 Python差分

【代码】Python差分。

2025-01-12 18:44:52 972

原创 Python前缀和

第一条性质用于处理出前缀和。前缀和:对于一个长度为。

2025-01-12 18:03:13 841

原创 Python排序

数据如果服从均匀分布,则利用桶排序效率越高。桶内部排序算法可以采用其他简单的排序算法。

2025-01-12 15:38:10 554

原创 Python基础语法

堆:完全二叉树,每个节点小于等于子节点(默认为最小堆)参数中的元素,注意,左添加时,在结果中。4、弹出并返回最小元素,同时添加元素。库一致,部分函数都有,特殊的函数有。的最大尺寸,如果没有限定的话就是。:返回给定的整数参数的最大公约数。类似,但是删除和插入操作比。参数中的顺序将被反过来添加。:移去并且返回一个元素,:移去并且返回一个元素,3、弹出并返回最小元素。

2025-01-12 13:50:46 738

原创 DFS之迭代加深、双向DFS、IDA*

达达希望一次搬掉尽量重的一些物品,请你告诉达达在他的力气范围内一次性能搬动的最大重量是多少。个数字,表示将初始棋盘中的每一个位置的数字,按整体从上到下,同行从左到右的顺序依次列出。每次移动最多会断开三个相连的位置,再重新加入三个相连的位置,因此最多会将。在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。仅一个整数,表示达达在他的力气范围内一次性能搬动的最大重量。,说明当前值加上再走最少的值都会超过答案,则提前退出了。中的一个表示,字母之间没有空格,如果不需要移动则输出。

2025-01-09 21:29:32 629

原创 DFS之剪枝

层内:先枚举半径再枚举高(半径相对于高来说对体积的影响较大,因为半径是平方级别),半径由大到小,高度由大到小。由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过。为每组数据,分别输出原始木棒的可能最小长度,每组数据占一行。

2025-01-07 14:06:08 1023

原创 DFS中的连通性和搜索顺序

输入的第一行为一个单独的整数 表示单词数,以下 行每行有一个单词(只含有大写或小写字母,长度不超过20),输入的最后一行为一个单个字符,表示“龙”开头的字母。请编写一段程序,给定 大小的棋盘,以及马的初始位置 ,,要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”,每个单词最多被使用两次。每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,若无法遍历棋盘上的所有点则输出 0。

2024-12-30 13:27:41 479

原创 普通并查集

上述是一个查找首级的并查集寻找函数find(int _a),他的最大作用就是不停的向上摸索上级,直到他找到首级结束,用一个异或运算让他的代码字节量压缩到清晰易懂轻量的形式.一般的并查集主要记录节点之间的链接关系,而没有其他的具体的信息,仅仅代表某个节点与其父节点之间存在联系,它多用来判断。由于我们的重点是在关注两个人是否连通,因此他们具体是如何连通的,内部结构是怎样的,甚至根节点是哪个都不重要。这个数组他记录了每个人他本身的数据和他的父级数据,例如f[16] = 6 意思是16号的上级是6号。

2024-12-29 11:13:48 833

原创 BFS中的双向广搜和A-star

性质:除了终点以外的其他点无法在出堆或者入堆的时候确定距离,只能保证终点出堆时是最优的可以。大家可以发现,双向搜索的大小非常小,所以已知起点和终点状态的搜索尽量用双向搜索。此题数据加强了,添加遍历层数进行优化,每次取出相同层的所有点进行扩展,如果到达。双向搜索,就是在起点搜索的过程,终点也在往回搜,从而达到优化的效果。现在,给你一个初始网格,请你通过最少的移动次数,得到正确排列。输出占一行,包含一个字符串,表示得到正确排列的完整行动记录。与其上、下、左、右四个方向之一的数字交换(如果存在)。

2024-12-28 16:58:58 1907

原创 BFS中的多源BFS、最小步数模型和双端队列广搜

因为有可能终点入队是被距离为1的边入的,后面的点可能会搜到离终点距离为0的边让其入队,故入队时不一定是最小距离,但出队时一定是。首先明确的一点是,这里是图中的格子和点是不一样的,点是格子上的角角上的点,每个点都有4个方向可以走,分别对应的是左上角,右上角,右下角,左下角。踩过格子到达想去的点时,需要判断是否需要旋转电线,若旋转电线表示从 当前点 到 想去的点 的边权是。达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上。

2024-12-27 22:50:16 1819

原创 BFS中的FloodFill和最短路模型

这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了 The Knight 的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。你的任务是,对于给定的地图,求出山峰和山谷的数量,如果所有格子都有相同的高度,那么整个地图即是山峰,又是山谷。来描述,我们用1表示西墙,2表示北墙,4表示东墙,8表示南墙,个整数,每个整数都表示平面图对应位置的方块的墙的特征。

2024-12-27 11:40:30 573

原创 SPFA找负环

求负环的常用方法,基于SPFAnn。

2024-12-25 21:22:07 928

原创 最小生成树的扩展应用

Kruskal算法在构建最小生成树时,并非从特定的起点开始,而是通过选择所有边中权重最小且不会导致环路形成的边来逐步建立最小生成树。随着算法的进行,它可以在已有部分树结构的基础上继续添加符合条件的新边,最终形成完整的最小生成树。这种特性赋予了该算法一定的灵活性,允许其在不依赖于起始顶点的情况下工作,并能处理动态变化的边集合。可以GVEn∣V∣m∣E∣Ekn−1Gm−kn−1−kG可以m−k。

2024-12-25 12:07:15 711

原创 Floyd算法及其扩展应用

传递闭包是把所有能够间接到达的点连接起来,表示它们能够直接到达Floyd算法可以在。

2024-12-24 19:18:15 979

原创 单源最短路的扩展应用

1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。需要注意的是:由于新添加了边(虚拟源点到起点的边),因此边的最大数量需要开大点,至少是。每一个单元的位置可用一个有序数对 (单元的行号, 单元的列号) 来表示。个单元之间可能互通,也可能有一扇锁着的门,或者是一堵不可逾越的墙。,请你求出旅行社最多可以为旅客提供多少种不同的满足限制条件的线路。,拿取所在单元的钥匙的时间以及用钥匙开门的时间可忽略不计。类,打开同一类的门的钥匙相同,不同类门的钥匙不同。

2024-12-24 12:20:39 907

原创 单源最短路的建图方式

(问题的转化和抽象)

2024-12-23 17:20:17 938

原创 最小生成树

最小生成树 (Minimum Spanning Tree, MST)问题是在图论中的一个经典问题。给定一个无向图,其中每条边都有一个权重或成本,最小生成树是指连接图中所有顶点的一个子集的树结构,且这个树的边的总权重是所有可能生成树中最小的。它是一棵树,因此它必须是连通的,并且没有环。它包含所有的顶点。如果原图有VVV个顶点,则MST将恰好有V−1V-1V−1条边。它的边的总权重是最小的。Prim算法和Kruskal算法。Prim算法。

2024-12-11 20:26:13 1332

原创 最短路问题

Dijkstra-朴素On2O(n^2)On2初始化距离数组, dist[1] = 0, dist[i] = inf;for n次循环 每次循环确定一个 min 加入 S 集合中,n 次之后就得出所有的最短距离将不在 S 中 dist_min 的点 ->tt->S 加入最短路集合用 t 更新到其他点的距离Dijkstra-堆优化OmlogmO(mlogm)Omlogm利用邻接表,优先队列。

2024-12-08 21:01:36 857

原创 最长上升公共子序列

【代码】最长上升公共子序列。

2024-12-08 15:02:37 216

原创 最长上升子序列

10001000003.On2OnlogndpOnlogn状态表示:fifii11if1​22if2​jjifj​fi​max1≤jiaj​ai​​fj​111≤i≤nfi​​11≤i≤nmax​fi​。

2024-12-08 15:00:41 654

原创 普通算法——欧拉筛

会先将2存进数组中,此时 i=2,数组中有2,所以筛去4,而此时2能被2整除,所以跳出循环。对欧拉筛的实现,主要是依靠一个数组模拟的栈来实现,核心思路为用栈储存已经发现的素数。在之后的遍历中,即可以素数数组中的数为因数来筛出此素数的倍数。如: 2 3 4 5 6 7 8 9 10 11 12 中。这一步使其筛除合数时,不会重复筛出同一个数。而使欧拉筛快于埃氏筛的最关键的步骤则为。值为基数,来乘当前素数数组中的数。再将3存入数组,此时 i=3…注意在循环条件时要加上。不然容易发生数组越界。

2024-12-08 14:51:27 293

原创 普通算法——埃氏筛

用于更加快速的求素数。

2024-12-08 14:49:59 170

原创 普通算法——一维差分

题目链接:https://www.acwing.com/problem/content/799/差分是前缀和的逆运算,也就是构造一个。

2024-12-08 14:45:29 1108

原创 普通算法——二维前缀和

题目链接:https://www.acwing.com/problem/content/798/

2024-12-08 14:41:10 720

原创 普通算法——一维前缀和

题目链接:https://www.acwing.com/problem/content/797/

2024-12-08 14:38:00 223

原创 辗转相除法

0,则a=b,b=c,再回去执行①。② 若c==0,则b即为两数的最大公约数。

2024-12-08 14:32:55 176

原创 数据结构理论

内容来源青岛大学数据结构与算法课程,链接:数据结构与算法基础(青岛大学-王卓)_哔哩哔哩_bilibili数据结构和算法的定义:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫算法数据结构 = 个体 + 个体的关系算法 = 对存储数据的操作解题的方法和步骤算法的描述:自然语言(英语,中文)流程图(传统流程图,NS流程图)伪代码,类语言:类C语言程序代

2024-12-04 13:17:18 852 1

原创 线段树思路

线段树是一个非常重要的算法,也是一个对于萌新来说较难的算法。线段树不是,应该是一种工具。它能把一些对于区间(或者线段)的修改、维护,从的时间复杂度变成。

2024-12-02 21:45:02 618 2

原创 云上day-28

首先用数组进行存数,接着进行遍历操作,用len记录实时长度,用maxlen记录最大长度值,如果当前下标的数比前面一个下标的数大,那么len++,否则,len重置为1,并在遍历途中,一直更新maxlen,最后输出。

2023-08-31 20:42:48 127

原创 云上day-27

只需要计算出n里面有多少个k即可知道最终的吸烟数量。

2023-08-30 19:16:25 132

原创 云上day-26

用数组进行存储数据,输入数据时,进行计数,每当输入奇数个数据时,对前面的数进行排序,并输出最中间的那个数。

2023-08-29 17:45:56 169

原创 云上day-25

本题可以先定义一个数组用来记录输入了哪些数据,输入数据后进行遍历操作,用cnt来记录第几个数,如果刚好等于k就输出该数据并结束程序,如果遍历完所有数据均未输出数据那么输出“NO RESULT”。(当然本题可以通过排序操作实现,对输入的数据先进行排序操作再输出第k大的数)

2023-08-28 18:23:01 128

原创 云上day-24

通过循环进行求解,外层循环模拟每颗金币的天数,即1颗金币的天数为1,2颗金币的天数为2...,内层循环模拟经过的天数,当总天数达到k时输出结果。

2023-08-27 18:07:09 73

原创 云上day-23

使用双重循环进行遍历。外层循环遍历所有的胡同的门牌号,内层循环遍历我家的门牌号,并用sum变量求门牌号的和,如果满足题目要求就输出答案退出程序。

2023-08-26 18:33:33 124

原创 云上day-22

输入两个矩阵,对矩阵的每一行和每一列进行遍历并进行加法操作,最后将结果矩阵通过循环遍历输出即可。

2023-08-25 17:13:29 88

原创 云上day-21

输入三个数求最大公约数,最大公约数一定小于等于这三个数中的最小值。因此先找出三个数的最小值,再从最小值到 1 依次遍历,当遇到这个数能被三个数整除时则为最大公约数。//选择a,b,c中最小的数。while(num >= 1){ //1是最小的公约数。i--)//从最小值开始循环。//只要这个数是同时是三个数的公约数,则跳出循环。//min为三数中的最小值。

2023-08-24 17:24:12 138 1

原创 云上day-20

首先定义一个记录最长平台的变量 max,接着定义变量 num 用来计数,循环遍历,如果前后两个数相等那么 num 加一,否则 num 重置为 1,循环遍历中如果 num 大于 max,则更新 max 的值。//只要出现连续的数则计数++//每个连续的平台至少一个数。//Max记录最大长度。else{ //否则连续中断,更新最大值。

2023-08-23 17:55:07 156

空空如也

空空如也

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

TA关注的人

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