自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并查集具体例题使用详解(力扣200岛屿数量)

因为当依次遍历查找元素的时候,查找的顺序是始终向右以及向下的,既这个元素无论如何都会被判断一次是否为1,便不需要再向右或下判断是否同为1,当遍历到这个数时,向上或向左判断就足够确认是否在同一个集合内了,即使不向右判断,下一次遍历也会跑到右边的元素身上,然后再向左向上判断是否为同为1(向下同理);而利用并查集的方法,可以设每一个1是一个单独的集合,然后从第一行第一列依次往m行n列向四周寻找,当邻接元素为1时,则合并为同一个集合,遇到零则终止该行或列,最后再统计场上剩余的集合数量,便得到岛屿数量;

2024-08-08 21:59:45 317

原创 并查集的详解与使用模版(洛谷3367)

3,多个元素之间,连接的方向其实无所谓,1->3,3->3自己,需要将2加入到集合中,此时3->2和2->3都可以,但总归上,会让各个集合的根相连,2这个集合中只有他本身,所以他就是自己的集合的根,所以2不能与1相连,只能与1,3集合中的根3相连接,至于方向,会使集合中的根不同,一般是让多元素的集合的根连向下一个单独的元素;对于多个集合之间合并为一个大的集合,相当于森林合并成一棵树,为了追求各个集合的元素被根所访问的时间平均最短,一般会让元素少的集合的根连向元素多的集合的根,尽量让整个树变得"又矮又胖";

2024-08-07 17:01:32 239

原创 (自记)sort的使用

include <algorithm> // 引入<algorithm>头文件以使用std::sort。// 假设有一个整数数组heights和一个指向数组首元素的指针id。// 使用std::sort对heights数组进行降序排序。// 输出排序后的数组。

2024-08-06 17:46:51 221

原创 双指针解决返回所有和为 0 且不重复的三元组(力扣15-三数之和)

来判断并修改j和k两个相向指针,可以快速的达到跳过重复元素的效果;1,对于第一位变量i遍历的时候,可以考虑此变量若与前一此遍历所对应的数据相同,可以将此变量++,既跳过此次循环,因为题目说不包含重复的三元组;),首先先sort将数据有序化,先利用循环来框定一个数,再对剩下的俩数利用头尾指针相向遍历,然后记录符合的数据,重复的就跳过;2,对于后两个相向变量,可以将执行过程的条件设定为(头j

2024-08-02 16:27:50 362

原创 双指针求数组中两数之和是否为目的值(力扣167两数之和II)

对于所要求的target值,不妨在数组的两边加上相向指针,若头指针和尾指针之和大于target,则可以尝试让数值之和更小,既让尾指针向前移一位,因为不论是当前尾指针的值与任何数相加都一定会大于target(因为头指针是全数组最小的值),既可以永远排除掉当前的尾指针的值,再进行首位值想加,与target判断,若小了就将头指针向后移一位,重复上述过程,直到首尾之和等于target,然后返回头尾指针对应的id;在此代码中关于输出的结果,因为题目默认数组的初始值从1id开始取,所以记得在结果处加一.

2024-08-01 15:56:28 129

原创 数组简化双向链表实际应用【模版】(洛谷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 1156

原创 数组简化实现单链表【模版】(洛谷3631单向链表)

替代方式:利用三个数组来实现,其一是用来存储第i位的数据的数据数组e[N],以及存储第i位的下一位数据的下标的下标数组next[N],最后是数据x所对应的下标的追溯数组id[N];然后利用idx变量名来表示存储的数据的个数;由于关建行都做了详细的解释,这里就不多做赘述了;

2024-07-30 15:47:16 333

原创 循环队列的具体使用[模版](洛谷1996-约瑟夫问题)

q.empty()用来 判断队列为空,既输出完了所有数据,而不是front==tail,这会导致队列中还存在一个数据。2,注意初定义数据时i取1,不然在赋值的时候会出现偏差;4,k来决定报数的人是多少,从一开始,直到m值出现;这行代码是关键,用来实现循环队列;

2024-07-30 00:23:13 279

原创 单调队列【模版】(洛谷1886滑动窗口)

2,出队则是针对窗口动态变化的情况,当i-q.front()>=k时,因为q.front()对应的是在此窗口中最大的值,不论是前面的还是后面的都比它小,所以在此窗口中,最大值前面的所有值都没有机会来作为最大值被输出,所以可以直接默认窗口内的最大值充当窗口的最左位,所以当i-窗口中最大值的下标大于等于窗口的容纳数量时,窗口最左值(也是单调队列中的最左值)就会被踢出队列,来容纳新的数据,并在新的窗口中寻找最大值来充当窗口的左边界(也就是单调队列的下一位);一般采用双头引用,c++中的deque函数最为合适。

2024-07-29 22:11:41 657

原创 单调栈的基本例题解决思路(洛谷2866)

默认每位数据id为1,既题中的个体数本身,然后该数据压碎了多少位,表示他可以看到的牛头个数,(当然不能包括自己),所以我利用w来存储他所压碎的数位,然后在此位入栈后将w赋值给他的id,来记录他所能看到的牛头,便于下一位更高的牛可以快速在此单调栈中获得自己所能看到的牛头。四,值得注意的是,每次我会利用qq来判断是否有压碎的情况出现,既出现高牛看到矮牛,因为此时单调栈中会有数值的减少,既top指针会--,只有这样我才能统计可以看到的牛头数,避免不必要的时长浪费,统计完后记得将qq重新赋值为0方便下一次判断。

2024-07-26 17:49:56 366

原创 单调栈解决向右取第一个最高位(洛谷2947)

二,(核心思路)关于单调栈,先依次从临时栈中依次往单调栈填入数据,若填入的数据比前一位小,保留数据和ID(位置),若比前一位大,则压碎(删除)前一位的数据,直到前一位数据比本身要大,并且前面被压碎的数据对应的输出位置是该较大数据的ID,重复此步骤,直到单调栈无新数据加入,留在单调栈中的数据所输出ID便为0;四,值得注意的是,在while中赋值的时候,先把out数组填入答案,再top--,直接快速删除单调栈前一位较小值,并且out的索引是单调栈的对应位的id,等于的是该循环中i的值,既第几位;

2024-07-25 22:16:17 188

原创 双栈实现基本计算器(力扣-224)

若判断不为括号,再判断是否为数字字符,若是数字,则通过进位依次“-‘0’”来将数字字符转为整型,并压入栈中,返回数位时记得将迭代的变量-1,以保证不会漏掉数位(记不得也可以不加,但不排除会遇到特殊情况);若既不是括号也不是数字,则只可能为加减号,判断此符号前一位是否还是符号,若是,则加上0防止出现错误计算,遇到符号后便开始计算,从两栈提取数据开始运算,一样的不要忘记将前括号弹出;1,其中计算的过程我使用的是令临时变量来获取两栈对应位的数据,再通过判断加减,算得数据后压入数据栈;(+,-,(,)均属于符号)

2024-07-24 11:46:15 315

原创 利用c++自带函数以及c手搓实现栈及其简单功能(洛谷B3614)

1 首先最重要的,关于栈的内存分配,使用unsigned long long类型,可以存的大数据,其次此定义务必放在main函数外作为全局声明,若放在main或其他函数中作为局部声明会导致内存溢出,导致程序运行崩溃(表示就是这个“特性”导致本码喽多花了1个小时反复研究【崩溃.jpg】)2 值得注意的是,关于top=0的初定义,务必放在第一次关于T的循环层,不要贪图方便把什么变量都放在函数开头一起来定义(这又是另一个悲伤的故事了)但是使用Switch本码喽过不了,不知道有没有懂行的大佬指正一下(膜拜)

2024-07-23 22:52:22 142

原创 两个数值链表逐位相加并处理进位(力扣面试150—两数相加)

本函数中,利用sum来计算两链表各个对应数位之间的数值和,val表示该位的相加结果,carry表示是否进位,进位是1,没有则为0,(进位不可能大于1);关键代码,在此for循环中,先定义sum和val,然后设结束条件为两原链表全为空,然后对两链表依次判断是否为空,不为空就指向下一位;if条件若头链表为NULL,既链表相加的初始阶段,构建头结点,赋值该位,并将下一位做好初始化,最后将目前节点放在头结点上;头结点不为空后,开始设定目前节点的下一位节点,用来延续节点,继续赋值,设立下下位,更新目前节点位置;

2024-07-22 10:50:46 1196 1

空空如也

空空如也

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

TA关注的人

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