- 博客(23)
- 收藏
- 关注
原创 哈希 暴力 前缀和
注意语法,list用()来定义内部结构,取值时用[ ]。不同的类型不能用+连接,比如列表类型和int类型,if,range都是需要()的。
2025-04-10 12:56:01
150
原创 sort函数的补充内容
表达式的语法结构要记得,n和m要确认是int类型,先赋值a列表1到n的数据,再利用lambda函数将特定表达式的sort来排序a列表,然后输出。注意排序并不会改变列表的数值,而是根据函数的判定来决定列表元素的顺序,并不会让列表中原来的数据发生更改。补充:取余要保留符号,数值正常计算。很直白的题目要求,利用sort函数将给出的对应的1到n的数据进行特定的数位和排序即可。注意构建函数的格式是固定格式,init以及it,it记得有return返回值。a通常作为一个表达式,来一一对b的迭代的对象进行算法运算。
2025-04-01 16:53:06
252
原创 python的sort()函数解决最短油井问题(入门难度)
【2025蓝桥杯备战(Python 基础,算法入门)4-2 排序函数】https://www.bilibili.com/video/BV16mFyeUEim?3,绝对值的函数是abs(),由于坐标有可能是负数,此处记得累加时要取绝对值。看到题目,通俗点就是求最优管道与各个位置的油井的最小长度和。2,中位数的下标需要是一个整数,用"//"来取整。可以确认x坐标是不需要的,我们只需要y轴坐标。
2025-02-04 20:14:48
207
原创 Python语法快速精简入门
注释:# 单行注释""" 以及 ''' 是多行注释变量:变量无需设定类型,直接赋值即可;变量开头不能以数字开头,只能由数字,_,字母构成变量分为四种基本类型,分别是列表,集合,元组,字典;简单语句:print(变量)print(“语句”)print(f"hello{a}")#表示输出固定格式,并且其中a为一个变量python默认输出一段句子后会转行,若想要不转行,可在输出一个语句后增加特定语句:print("hello",end="")
2025-02-03 21:34:16
754
原创 java音乐最简单基础
AudioInputStream 则是一个音频类 ,利用后续方法将is转化为音频形式 ,存入ais。PlaySound.class.getClassLoader()是此名为PlaySound的类(package)中的一个自带的类加载器,用于将此文件打包起来给到对象is;先利用Clip类,来表示一段音频片段,利用AudioSystem.getClip()方法来获取音频,传输给bgm这个对象。然后利用Clip类的对象bgm,来执行open操作,用于打开文件。然后start开始执行。
2024-12-21 23:21:12
208
原创 dfs经典例题——迷宫问题(利用二维数组优化方向判断)
思路:首先关于方向问题,我们可以设定一个默认方向,比如先默认向右,触底向下,然后再是向左向上。初始量:地图数组(注意map不要作为变量名,因为有对应内置函数),判断数组,步数,数据数组(我这里采用了自增数组vector);由于每个方向都需要单独写出执行过程,我们可以思考将四个方向合并一起达到节省代码量。可以利用两个数组来表示x与y的方向,然后每次循环从右下左上开始循环搜索路径。ans存储的单位是一个pair,每个pair包含了两个数据,递归过程中需要判断下一步是否是障碍物,以及是否被走过。
2024-11-25 20:25:08
219
原创 深度优先搜索——全排列(重点)n皇后问题【模版】
现第一次从1开始执行dfs搜索,一一放入盒子并标记flag,到头之后,开始回溯到上一次最后一次放牌的时候,将3从三号盒子拿回,因为每次循环的结束条件是第三号盒子被放入,所以此时会将循环递归dfs函数的参数到第二号盒子被放入之前,此时因为上一次递归是在二号放入2号牌,所以此次跳过2(因为原先2号牌放入的那次循环已经结束了),开始往后将3号牌放入此时的二号盒子中,再继续,便将手中的留有的2号牌放入三号盒子。列:lie【10】:若lie【x】为0,则说明此列无棋子,可下放棋子。例如:算出 3 的全排列。
2024-11-19 21:04:41
466
1
原创 并查集具体例题使用详解(力扣200岛屿数量)
因为当依次遍历查找元素的时候,查找的顺序是始终向右以及向下的,既这个元素无论如何都会被判断一次是否为1,便不需要再向右或下判断是否同为1,当遍历到这个数时,向上或向左判断就足够确认是否在同一个集合内了,即使不向右判断,下一次遍历也会跑到右边的元素身上,然后再向左向上判断是否为同为1(向下同理);而利用并查集的方法,可以设每一个1是一个单独的集合,然后从第一行第一列依次往m行n列向四周寻找,当邻接元素为1时,则合并为同一个集合,遇到零则终止该行或列,最后再统计场上剩余的集合数量,便得到岛屿数量;
2024-08-08 21:59:45
443
原创 并查集的详解与使用模版(洛谷3367)
3,多个元素之间,连接的方向其实无所谓,1->3,3->3自己,需要将2加入到集合中,此时3->2和2->3都可以,但总归上,会让各个集合的根相连,2这个集合中只有他本身,所以他就是自己的集合的根,所以2不能与1相连,只能与1,3集合中的根3相连接,至于方向,会使集合中的根不同,一般是让多元素的集合的根连向下一个单独的元素;对于多个集合之间合并为一个大的集合,相当于森林合并成一棵树,为了追求各个集合的元素被根所访问的时间平均最短,一般会让元素少的集合的根连向元素多的集合的根,尽量让整个树变得"又矮又胖";
2024-08-07 17:01:32
315
原创 (自记)sort的使用
include <algorithm> // 引入<algorithm>头文件以使用std::sort。// 假设有一个整数数组heights和一个指向数组首元素的指针id。// 使用std::sort对heights数组进行降序排序。// 输出排序后的数组。
2024-08-06 17:46:51
283
原创 双指针解决返回所有和为 0 且不重复的三元组(力扣15-三数之和)
来判断并修改j和k两个相向指针,可以快速的达到跳过重复元素的效果;1,对于第一位变量i遍历的时候,可以考虑此变量若与前一此遍历所对应的数据相同,可以将此变量++,既跳过此次循环,因为题目说不包含重复的三元组;),首先先sort将数据有序化,先利用循环来框定一个数,再对剩下的俩数利用头尾指针相向遍历,然后记录符合的数据,重复的就跳过;2,对于后两个相向变量,可以将执行过程的条件设定为(头j
2024-08-02 16:27:50
455
原创 双指针求数组中两数之和是否为目的值(力扣167两数之和II)
对于所要求的target值,不妨在数组的两边加上相向指针,若头指针和尾指针之和大于target,则可以尝试让数值之和更小,既让尾指针向前移一位,因为不论是当前尾指针的值与任何数相加都一定会大于target(因为头指针是全数组最小的值),既可以永远排除掉当前的尾指针的值,再进行首位值想加,与target判断,若小了就将头指针向后移一位,重复上述过程,直到首尾之和等于target,然后返回头尾指针对应的id;在此代码中关于输出的结果,因为题目默认数组的初始值从1id开始取,所以记得在结果处加一.
2024-08-01 15:56:28
186
原创 数组简化双向链表实际应用【模版】(洛谷1160队列安排)
双链表的删除操作则是将第i位元素(待删元素)的左方元素的右指针连接第i+1位元素,将第i+1位元素的左指针连接第i-1位元素,然后再将第i位元素的左右指针指向空值,既从链表中删去了第i位元素,参考代码很好理解,不多做赘述.4,双链表的删除操作则是将第i位元素(待删元素)的左方元素的右指针连接第i+1位元素,将第i+1位元素的左指针连接第i-1位元素,然后再将第i位元素的左右指针指向空值,既从链表中删去了第i位元素;),然后再将左右元素的对应右左指针分别连接在i身上,彻底完成插入操作.
2024-07-31 16:45:32
1366
原创 数组简化实现单链表【模版】(洛谷3631单向链表)
替代方式:利用三个数组来实现,其一是用来存储第i位的数据的数据数组e[N],以及存储第i位的下一位数据的下标的下标数组next[N],最后是数据x所对应的下标的追溯数组id[N];然后利用idx变量名来表示存储的数据的个数;由于关建行都做了详细的解释,这里就不多做赘述了;
2024-07-30 15:47:16
420
原创 循环队列的具体使用[模版](洛谷1996-约瑟夫问题)
q.empty()用来 判断队列为空,既输出完了所有数据,而不是front==tail,这会导致队列中还存在一个数据。2,注意初定义数据时i取1,不然在赋值的时候会出现偏差;4,k来决定报数的人是多少,从一开始,直到m值出现;这行代码是关键,用来实现循环队列;
2024-07-30 00:23:13
347
原创 单调队列【模版】(洛谷1886滑动窗口)
2,出队则是针对窗口动态变化的情况,当i-q.front()>=k时,因为q.front()对应的是在此窗口中最大的值,不论是前面的还是后面的都比它小,所以在此窗口中,最大值前面的所有值都没有机会来作为最大值被输出,所以可以直接默认窗口内的最大值充当窗口的最左位,所以当i-窗口中最大值的下标大于等于窗口的容纳数量时,窗口最左值(也是单调队列中的最左值)就会被踢出队列,来容纳新的数据,并在新的窗口中寻找最大值来充当窗口的左边界(也就是单调队列的下一位);一般采用双头引用,c++中的deque函数最为合适。
2024-07-29 22:11:41
754
原创 单调栈的基本例题解决思路(洛谷2866)
默认每位数据id为1,既题中的个体数本身,然后该数据压碎了多少位,表示他可以看到的牛头个数,(当然不能包括自己),所以我利用w来存储他所压碎的数位,然后在此位入栈后将w赋值给他的id,来记录他所能看到的牛头,便于下一位更高的牛可以快速在此单调栈中获得自己所能看到的牛头。四,值得注意的是,每次我会利用qq来判断是否有压碎的情况出现,既出现高牛看到矮牛,因为此时单调栈中会有数值的减少,既top指针会--,只有这样我才能统计可以看到的牛头数,避免不必要的时长浪费,统计完后记得将qq重新赋值为0方便下一次判断。
2024-07-26 17:49:56
468
原创 单调栈解决向右取第一个最高位(洛谷2947)
二,(核心思路)关于单调栈,先依次从临时栈中依次往单调栈填入数据,若填入的数据比前一位小,保留数据和ID(位置),若比前一位大,则压碎(删除)前一位的数据,直到前一位数据比本身要大,并且前面被压碎的数据对应的输出位置是该较大数据的ID,重复此步骤,直到单调栈无新数据加入,留在单调栈中的数据所输出ID便为0;四,值得注意的是,在while中赋值的时候,先把out数组填入答案,再top--,直接快速删除单调栈前一位较小值,并且out的索引是单调栈的对应位的id,等于的是该循环中i的值,既第几位;
2024-07-25 22:16:17
250
原创 双栈实现基本计算器(力扣-224)
若判断不为括号,再判断是否为数字字符,若是数字,则通过进位依次“-‘0’”来将数字字符转为整型,并压入栈中,返回数位时记得将迭代的变量-1,以保证不会漏掉数位(记不得也可以不加,但不排除会遇到特殊情况);若既不是括号也不是数字,则只可能为加减号,判断此符号前一位是否还是符号,若是,则加上0防止出现错误计算,遇到符号后便开始计算,从两栈提取数据开始运算,一样的不要忘记将前括号弹出;1,其中计算的过程我使用的是令临时变量来获取两栈对应位的数据,再通过判断加减,算得数据后压入数据栈;(+,-,(,)均属于符号)
2024-07-24 11:46:15
437
原创 利用c++自带函数以及c手搓实现栈及其简单功能(洛谷B3614)
1 首先最重要的,关于栈的内存分配,使用unsigned long long类型,可以存的大数据,其次此定义务必放在main函数外作为全局声明,若放在main或其他函数中作为局部声明会导致内存溢出,导致程序运行崩溃(表示就是这个“特性”导致本码喽多花了1个小时反复研究【崩溃.jpg】)2 值得注意的是,关于top=0的初定义,务必放在第一次关于T的循环层,不要贪图方便把什么变量都放在函数开头一起来定义(这又是另一个悲伤的故事了)但是使用Switch本码喽过不了,不知道有没有懂行的大佬指正一下(膜拜)
2024-07-23 22:52:22
246
原创 两个数值链表逐位相加并处理进位(力扣面试150—两数相加)
本函数中,利用sum来计算两链表各个对应数位之间的数值和,val表示该位的相加结果,carry表示是否进位,进位是1,没有则为0,(进位不可能大于1);关键代码,在此for循环中,先定义sum和val,然后设结束条件为两原链表全为空,然后对两链表依次判断是否为空,不为空就指向下一位;if条件若头链表为NULL,既链表相加的初始阶段,构建头结点,赋值该位,并将下一位做好初始化,最后将目前节点放在头结点上;头结点不为空后,开始设定目前节点的下一位节点,用来延续节点,继续赋值,设立下下位,更新目前节点位置;
2024-07-22 10:50:46
1367
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅