自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 acwing5992--封闭图形的个数

题目很水,就写个水水的题解吧,考察的是双关键字排序和一些小细节。我采用数组存储,自定义了一个排序函数,并用sort直接进行排序。

2025-04-07 21:36:24 142

原创 大盗阿福--动态规划的应用

每一家都有抢劫和不抢两种状态,假设函数dfs(参数为i)表示从最后一家到第i家满足题目要求的最大数量,则dfs(i)=max(home[i]+dfs(i+2),dfs(i+1))。这是深度搜索的方法,考虑到记忆化搜索,便可写为动态规划,将dfs的结果写入一个数组ans,从后向前遍历,最终答案就应该是ans[1](假设数据范围是1~n)阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。接下来的每组数据,第一行是一个整数 N ,表示一共有 N 家店铺。

2025-04-01 19:05:36 235

原创 二分模板(整数二分、实数二分)

1.确定一个区间使答案(目标值)一定在区间中2.找一个具有二段性的性质使答案成为两端之间的边界这样答案就有两种情况,一是在左区间的最右边,二是在右区间的最左边,针对这两种情况有 不同处理。

2025-03-05 20:54:43 209

原创 归并排序模板

归并排序的主要步骤为两步:1.分--将序列分为左右两部分,分别对他们使用归并排序2.合,将排好序的两部分按照大小顺序合起来(这一步需要一个辅助空间)

2025-03-03 21:05:59 309

原创 快速排序模板

1.确定划分点(一般取最左端、最右端或正中间)2.调整范围,将小于划分点的数放到左边,大于的放到右边3.递归处理左右区间关键点在于第二步,即如何优雅的调整范围。

2025-03-03 19:50:40 172

原创 POJ2418-硬木的种类

1.按字母顺序输出,在网上搜索一番后才知道map和set本身就会自动按关键字排序,因此最后只需遍历输出即可,无需其他处理。2.小数点后位数保留。之前用cout保留总是忘记,这次用c的printf,包含头文件#include<cstdio>

2024-11-29 17:23:43 221

原创 cache高速缓存

对于cache的写入,有两种方式:write through、write back,即写直透、写返回。写返回是只写入cache,再这个数据要被新数据覆盖之际再写入主存,通常会设置一个dirty判断该位是否为脏位,如果不是,则可直接覆写并设为脏位,如果是,则应把该数据放到主存再覆写。对于cache的读,要由给定的地址划分字段去到cache中寻找内容,一个地址通常被划分为byte offset、word offset、index、tag域。写、写miss,提升cache性能的方式等主题。使用多级cache;

2024-11-27 00:04:39 242

原创 二叉树中距离为k的结点问题

2.对结点树寻找距离为K的结点。该问题可以分为两步,先遍历寻找target结点的子树中满足要求的节点,将他们放进vector向量中,注意这么做的话vector要为引用型。之后再递归从target的祖先节点中找,我们注意到target父节点的另一个分支(即target的兄弟节点的子树才可能有答案,因为target已经被遍历过了),所以对target父节点的递归写为遍历它的另一个分支以及再次向上遍历。1.对树的顺序结构存储建树,我采用的是用队列作为辅助建树(其实还可以写成递归,大家有兴趣可以试一下);

2024-11-23 20:36:27 373

原创 POJ1125—股票经纪人(dijkstral算法求图最短路径)

采用链式前向星存图以及改进后的djikstra算法,改进之处在于采用优先队列,并且只更改刚被添加的结点的邻接点(这也是为什么要采用链式前向星的原因)参考文献:李春葆数据结构教程C++语言描述第二版(清华大学出版社)

2024-11-23 20:26:44 184

原创 约瑟夫环问题--不同存储结构对应的不同解法

约瑟夫环问题是一个很经典的问题:有M个人,编号分别为1到M,玩约瑟夫环游戏,最初时按编号顺序排成队列;每遍游戏开始时,有一个正整数报数密码N,队列中人依次围坐成一圈,从队首的人开始报数,报到N的人出列,然后再从出列的下一人开始重新报数,报到N的人出列;重复这一过程,直至所有人出列,完成一遍游戏,所有出列的人形成新队列;游戏可能玩很多遍,每遍有新报数密码。求若干遍游戏完成后队列次序。本题要求使用单链表实现,程序要求采用模块化设计,格式规范,有合适注解。

2024-09-14 15:06:32 755

原创 单调队列--滑动窗口最大值(leetcode23)

单调队列是一种特殊的队列数据结构,它能够在常数时间内找到队列中的最值。单调队列可以用来解决一些与最值相关的问题,例如滑动窗口最大值、滑动窗口最小值(即由于维护一个输入序列中指定区间的最值)。单调队列的主要操作有两个:添加元素和移除元素。添加元素时,我们需要保持队列的单调性,即保证在添加新元素后,队列仍然是递增(或递减)的。为了实现这一点,我们可以将新元素与队尾元素进行比较,如果新元素大于(或小于)队尾元素,则将队尾元素移除,直到队列保持单调性为止。移除元素时,我们只需要判断队首元素是否需要移除即可。

2024-08-28 14:55:13 2056

原创 leetcode707--设计链表(数据结构--链表的基础知识)

对于delete函数,我选择找到要删除结点的前一个结点,但初始的遍历指针却是从头节点(虚拟头节点的下一个)开始的,设想一下这样的话如果要删除的就是头节点,那怎么能找到他的前一个结点呢?2.由于是完成一个类,因此我将虚拟头节点放入private中,设置nums这个变量是为了方便判断index是否越界。// 现在,链表变为 1->3。1.设不设虚拟头结点都可以,但一般而言设虚拟头节点会更方便,操作更统一。你可以选择使用单链表或者双链表,设计并实现自己的链表。是指向下一个节点的指针/引用。

2024-08-23 20:39:09 1752

原创 leetcode203--移除链表元素

本题较为简单,值得一提的是为了保证头节点的处理与其他结点一致,常会加一个虚拟头节点dummyhead(本题中我用的是ans表示)。此外,由于C++没有自动内存管理,所以在确定一个结点是要删除的结点时应该delete掉,题目比较简单,就不再赘述了,有疑问的话欢迎大家评论或私聊交流呦^O^时间复杂度如下图,可以看出时间很快,嘎嘎(๑•̀ㅂ•́)و✧。如果当前结点不符合要求,才需要后移指针。,请你删除链表中所有满足。给你一个链表的头节点。

2024-08-23 14:47:53 349

原创 leetcode3--Longest Substring Without Repeating Characters(无重复字符的最长子串)【滑动窗口】

正如标题所述,该题会用到滑动窗口的思想,那么什么是滑动窗口以及什么时候使用呢?顾名思义,滑动窗口就是可滑动的窗口,这里的窗口即代表所包含的子串,滑动代表所包含的子串可以依次滑动(一般都是从左到右滑动),我们只需要创建两个指针(广义指针,并非术语指针)来表示窗口的左右边框,就可以表示该滑动窗口。那创建完窗口后怎么操作捏?让右指针先右移1,判断现在的子串是否符合题目要求。如果符合右指针就继续右移;如果不符合左指针右移1,并判断现在是否符合,不符合则继续移动。//以下是该模板伪代码。

2024-08-14 12:17:19 1770 1

原创 leetcode2--add two numbers(两数之和)

思路为对应位相加,用flag数组存进位信息,ans数组存每个位处理后的数值,处理每个位包括两种情况:一个是低位进1该位加1,一个是该位要进位减10。处理完每个位后还要注意最高位的进位:如果最高位有进位的话是要产生一个新的最高位。最开始的想法是将两个链表给的信息转化为整数,再将两个整数相加,最后将和转化为一个链表。最后想说的一点是对两个链表的处理,如果两个链表等长,那没啥好说的。先处理两个链表均不为空的部分,再处理剩下的部分。在力扣中,这道题结点数在【1,100】内,因此ans数组可设的比100大点。

2024-08-12 10:14:14 461

空空如也

空空如也

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

TA关注的人

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