自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Windows 10 安装使用Docker踩过的坑和解决-31/10/2024

卸载重装Docker Desktop,Windows搜索框→应用与功能→Docker Desktop卸载。然后重新安装Docker Desktop即可。Docker Desktop配置一下镜像源。

2024-10-31 20:52:29 2483 4

原创 [Leetcode LCR188.][Medium]-买卖芯片的最佳时机-dp/状态压缩

【代码】[Leetcode LCR188.][Medium]-买卖芯片的最佳时机-dp/状态压缩。

2024-10-03 16:14:30 520 1

原创 HTTP Status 404 - /brand-demo/selectAllServlet错误解决原因-Servlet/JavaWeb/IDEA

注:IDEA新建Servlet时,默认的@WebServlet注解中name需要改urlPatterns,要加/,而且doPost和doGet要看清楚位置。

2024-09-26 00:12:47 423

原创 [Leetcode 543][Easy]-二叉树的直径-递归

取一个结点的最大直径就是取一个结点的左子树最大深度+右子树最大深度之和,因此可以定义一个递归函数,作用是取一个结点的最大直径。这个函数中还实现了求左子树最大深度/右子树最大深度的功能。因此,一个结点的直径=左子树根节点深度和+子树根节点深度。就不用像官方题解那样又加一又减一了。容易搞不明白的是边界条件。这里我定义一个结点的左子树和右子树都为空时,该节点深度=1。

2024-09-20 12:54:45 417

原创 [Leetcode LCR 154][Medium]-复杂链表的复制-链表

然后再复制random,从头遍历链表,cur.next是复制的新节点,cur.next.random=cur.random.next。遍历完的同时random也复制好了。注意不能cur.next.random=cur.random。因为这样的话就拆分不了链表了。这道题难点在于如何处理random。因为涉及到的所有节点都在同一链表,因此可以在链表上利用复制-拆分的方法去做。先在链表上把每个节点复制自身一次,相当于cur与cur.next中间插入一个val与cur.val相同的新节点。

2024-09-16 14:30:34 369

原创 [AcWing]-多重背包问题-动态规划

和完全背包问题唯一不同的是物品的件数不再是无限了,而是有限的。那么只需要在完全背包问题的基础上把最大遍历次数。和当前背包能放入物品的最大件数。

2024-09-03 10:13:12 398

原创 [AcWing]-完全背包问题-动态规划

dp数组的设置是一样的,在选择是否放入第i件物品时,物品体积大于背包当前容量的情况和01背包问题一样。所不同的是这件物品要取多少次。那么可以遍历最大放入次数,找出最大的总价值的情况。注意遍历过程中要更新dp[i][j]和01背包问题基本一样,唯一不同的是每件物品可以取无限次。

2024-09-03 10:09:31 363

原创 [AcWing]-01背包问题-动态规划

题目给什么,要求什么,我们就设dp数组为什么。比如题目给了物品个数N,背包容量V,那就设dp数组为int[N][V]。dp[i][j]的含义是对于要对第i个物品做出选择且背包容量为V时,可取最大的总价值。

2024-09-03 10:03:29 351

原创 [Leetcode 51][Hard]-n皇后问题-回溯

这种可以算是组合问题的变种,在回溯函数中我们要保存当前已放置皇后的所有位置,同时递归调用时要进行寻找下一个皇后的放置位置。然后在回溯函数内,遍历当前行的所有位置,同时判断此位置是否可以放置皇后。递归终止的条件时行数=棋盘行数,将此时的棋盘状态存入结果数组。难点在于如何判断当前位置是否可以放置皇后,可以从上方、主对角线、副对角线去看有没有已经放置皇后,若有则该位置不可以放置皇后,若无则可。左方不用看的原因是一行只会放一个皇后,每遍历到新的一行时该行一定是未放置皇后的。

2024-09-01 12:04:02 808 2

原创 [Leetcode 47][Medium]-全排列 II-回溯(全排列问题)

和上一道Leetcode46相比,有变化的地方是要排除重复组合的情况。那么在组合问题中去除重复组合的方法是先对数组进行排序,然后在回溯函数中判断当前元素与上一个元素是否相同,若相同则直接访问下一个元素。在全排列问题中要稍微改一下。以{1,1,2}为例。

2024-09-01 11:52:43 354

原创 [Leetcode 46][Medium]-全排列-回溯(全排列问题)

对于全排列问题,很明显要用回溯法。但是和组合问题不一样的是全排列问题是可以取先前遍历的元素的。因此需要另外新建一个状态数组来存储所有元素是否被访问过的状态。回溯时把状态数组的当前元素的状态恢复成未访问。

2024-09-01 10:45:12 297 2

原创 [Leetcode 216][Medium]组合总和 III--回溯(组合问题)

理解回溯法的本质是穷举所有可能的状态,通过递归来使得可以在原状态的基础上进入下一个状态,也就是入栈。那么不停地入栈直到没有可进入的状态时,递归函数进行出栈。那么函数出栈时,我们需要把当前状态还原成原状态,因为之前进入的下一个状态随着出栈已经结束了。对于组合问题,首先要想到回溯法。那么可以根据回溯法模版进行设计。

2024-08-31 17:46:22 482 1

原创 [Leetcode 435][Medium]-无重叠区间-贪心

可以先将区间按右端点的值进行升序排序,然后遍历数组,在此基础上保留左端点>=最小右端点的值的区间,再把最小右端点更新为当前的右端点的值。这样我们可以只判断遍历到的区间的左端点是否会与保留的区间的右端点产生重合的情况。要求移除区间的最小个数,也就是要求使得剩余区间互不重叠的最大区间数。

2024-08-30 11:42:49 328

原创 基于清风数学建模视频课的思维导图

想要购买课程前往微xin公众号:数学建模学习交流。

2024-08-28 19:39:49 532

原创 [Leetcode 230][Medium] 二叉搜索树中第 K 小的元素-大根堆/优先队列/DFS深度优先搜索

比较简单的思路是把所有结点加入到优先队列,然后重复出队列操作使得队列中元素数量为k,此时队首元素即为第K小的元素。优先队列的数据结构是大根堆,在遇见比堆顶小的元素时直接替换堆顶并维护大根堆,当大根堆元素数量为K时此时堆顶的意义为全体元素中最小的K个数中最大的数,也就是第K小的数。二叉搜索树的特性是每个节点比其左子树所有节点要大,比其右子树所有节点要小。当K==1时遍历到的结点即为第K小的结点。要注意的是需要在类内设立两个成员变量来暂存当前K值和当前第K的元素值。K不可以作为参数传入dfs。

2024-08-26 15:28:08 397

原创 [Leetcode 105][Medium] 从前序与中序遍历序列构造二叉树-递归

同理,Inorder中[i+1,r2]的元素就是右子树的元素,在Preorder中表现为[l1+i-l2+1,r1](l1+i-l2为左子树元素,+1就是右子树第一个元素)综上,Preorder中根节点索引为l1,左子树元素区间为[l1+1,l1+i-l2],右子树区间为[l1+i-l2+1,r1]Inorder中[l2,i-1]的元素就是左子树的元素,在Preorder中表现为[l1+1,l1+i-l2]Inorder中根节点索引为i,左子树元素区间为[l2,i-1],右子树区间为[i+1,r2]

2024-08-26 15:11:10 479

原创 [Leetcode 61][Medium]-旋转链表

因为k的所有取值情况都可以通过规律化归解决,同时旋转后的链表元素依然为原来链表中的元素且后续节点顺序与原链表相同。因此我们可以在链表尾部再接上一个和原来链表一模一样的链表,找到旋转k次之后的头结点,再从此截取原链表长度的结点作为返回值。首先发现这样的规律:当k大于等于链表中节点总数n时,会发现此时旋转后的链表和k=k%n时的旋转后的链表一样。n-k的由来:旋转k次,代表从链表尾部往前数第k个结点为新的头结点,那么从链表头往后数就是第n-k个结点。

2024-08-21 11:15:34 432

原创 [Leetcode][Medium]-面试题 17.14.最小k个数-TOP K问题-快排/大根堆

那么当k<=l2-1时,说明还需要对左边区间[l,l2-1]进行快排,当k>=r2时,说明还需要对右边区间[r2,r]进行快排,当k在[l2,r2-1]时,说明arr[k]已经被放置至数组升序排序的正确位置,那么[0,k-1]上的元素就是题目中要求的k个数。把数组[0,k-1]区间上的数化为大根堆。若遍历到的元素小于堆顶,则替换堆顶。在这个位置的左边区间[l,l2-1]上的元素都比它小,在这个位置的右边区间[r2,r]上的元素都比它大。数组中最小的k个数就是说把数组升序排列,求[0,k-1]区间上的数。

2024-08-07 17:47:06 331 3

原创 [Leetcode 215][Medium]-数组中的第K个最大元素-快排/小根堆/堆排序

把新的堆顶元素在[0,nums.length-1)处进行siftdown()下沉操作,此时的堆顶元素即为数组第二大的元素,那么又可以与数组的[nums.length-2]元素进行交换得到新的堆。要选择第K个最大元素,则可以把该数组[0,k-1]的部分转化为小根堆,遍历[k,nums.length-1]的部分,若遍历到的元素大于堆顶元素,则可以交换此两元素,然后对新的堆顶元素进行siftDown下沉操作,重复上述步骤,最终可以得到前K个最大元素组成的小根堆,堆顶即为第K大的元素。

2024-08-07 17:22:02 482 2

原创 [Leetcode 875][Medium]-爱吃香蕉的珂珂-二分搜索

下一步,找出最小的k。同时发现k的上限是max(piles[i]),下限是1。因此可以用二分搜索,找出>=h对应的速度的k的最小值。具体来说就是k对应的时间t=h时,要让k尽量小。k对应的时间t<=h时,说明mid值可能为答案,要保留,同时继续寻找潜在的比mid更小的k即r=mid。k对应的时间t>h时,说明当前吃香蕉速度k不够大,因此l=mid+1。题目要求在时间h内(含h),求解最小速度k。假设速度为k,那么吃香蕉所用时间t就等于每堆香蕉piles[i]除以速度k所得的向上取整的商之和。

2024-08-03 17:38:31 410

原创 [Leetcode 203][Easy]移除链表元素

最开始的想法:遍历链表的时候不能直接用head,否则会改变head,要新设一个ListNode prev=head。关于链表,要想清楚的地方是:prev指向的ListNode类,改变其next属性。和head通过迭代访问next属性所访问到的类的next属性也会一起改变,因为两者访问到的是同一个类。第二种要在第一种基础上进行(删除到头元素不是要删除的元素),然后遍历链表,遍历到不是要删除的元素再链接。当prev的下一个结点不是要被删除的结点时才更新prev,否则删除prev的下一个结点。

2024-07-24 23:26:45 630

原创 [Leetcode 128][Medium] 最长连续序列

接着想到数据结构哈希表,哈希表适合用于无序的数据问题。因此可以将数组元素全部存入哈希表,而后遍历哈希表,每次遍历都要找出连续升序排序的序列的头。找到头就要继续找下一个元素直到序列尾。然后保留每次寻找过程的序列长度的最大值。首先看到找连续升序排序的最长序列长度,想到对数组进行排序预处理。但是排序算法时间复杂度需要O(nlogn),题目要求时间复杂度为O(n)。因此不能进行排序与处理。

2024-07-03 19:07:40 345

原创 [Leetcode 136][Easy]-只出现一次的数字

②后面研究,发现对于对于查找数组中唯一一个出现一次的元素,我们更适合使用线性扫描和位操作的方法。异或运算满足交换律,且一个数异或自己结果是0,一个数异或0结果是自己。因此把数组中所有元素进行异或运算,得到结果是唯一数。①首先看到数组中重复的数字,想到快慢指针,但是数组的元素是乱序的不好求。使用了STL库的sort函数,时间复杂度O(nlogn)不符合题目要求,空间复杂度O(1)。

2024-07-03 18:58:50 304 1

原创 【Leetcode 566】【Easy】重塑矩阵

按行遍历顺序遍历原矩阵,设一个临时vector<int>存放新矩阵的每一行的元素,一边遍历一边判断临时vector的元素个数是否等于新矩阵每一行的元素个数,若相等,则说明新矩阵一行已完成,要读下一行,把临时vector元素清空同时新矩阵行数r要-1。若不相等,说明新矩阵的一行的元素还没读完,要继续往临时vector添加原矩阵元素。重复上述步骤知道新矩阵行数r=0。首先要确保重塑后的矩阵内元素个数和原矩阵元素个数要相同,如果不同则原样返回原矩阵。

2024-07-01 13:24:47 372

原创 【Leetcode 67 Easy】二进制求和

按照模2加法的执行过程,从低位加到高位,用int型去执行加法运算,再用to_string()函数转换成string添加到ans。主要注意a和b长度不一致的情况和涉及进位的计算。最后别忘了检查进位是否为1,若为1则代表最高位数据位有进位。,以二进制字符串的形式返回它们的和。给你两个二进制字符串。

2024-06-30 20:44:24 355

原创 实验八 Linux虚拟内存 实验9.1:统计系统缺页次数成功案例

之前试图用VMware15.5、虚拟机配置两个双核CPU、内存10G、Ubuntu22版本与linux6.7.8编译,一直出现卡死。提示客户机已禁用CPU,请关闭或重置客户机:各种方法试过都无效,我的办法是把虚拟机配置调低,重新新建一个虚拟机。内核版本不同内核文件代码也有出入,版本差异性令c文件要修改,如若要在linux6.7.8运行,则。,然后卡死的话先等一会,如果等了较长时间直接重启,调整虚拟机内存等配置,恢复快照。解压缩、复制粘贴文件提示permission denied:解决方法参考。

2024-05-12 10:22:50 1119 2

原创 Ubuntu意外断电vmdk损坏--打不开磁盘“***.vmdk”或它所依赖的某个快照磁盘。

背景:电脑资源管理器崩溃卡死,强行断电重启,结果虚拟机打不开了,提示打不开磁盘“***.vmdk”或它所依赖的某个快照磁盘。VMFS Revocery软件操作参考网上找到的回答。

2024-05-09 08:47:05 869 1

原创 PowerToys安装卸载失败如何解决——此产品的配置信息已损坏请与你的技术支持人员联系——Setup Failed One or more issues caused

本人因为系统版本过低,不支持新版本PowerToys,直接右键删除PowerToys文件夹所有内容,但是在下载另一版本PowerToys时总是提示安装失败无法卸载旧版本,搞了半天才搞明白。

2024-03-29 21:00:41 1731 1

原创 蓝桥杯-体育健将-CPP-贪心

【代码】蓝桥杯-体育健将-CPP-贪心。

2024-03-19 09:06:42 547

原创 [蓝桥杯]-最大的通过数-CPP-二分查找、前缀和

【代码】[蓝桥杯]-最大的通过数-CPP-二分查找、前缀和。

2024-03-14 22:13:24 556

原创 蓝桥杯[OJ 1621]挑选子串-CPP-双指针

【代码】蓝桥杯[OJ 1621]挑选子串-CPP-双指针。

2024-03-12 00:05:01 583

原创 蓝桥杯[OJ 3792]-小蓝的礼物-CPP-贪心

若能买下,则把该商品原价加到总价,再继续判断下一个商品是否能用券后价格买下。

2024-03-09 09:25:43 502

原创 蓝桥杯[OJ 3791]—珠宝的最大交替和—CPP-贪心

一:问题描述二、整体思路:观察到可以把交替和中各项分为奇数组与偶数组,最多只能交换一次,先假设要交换。 偶数组的项都要减去,奇数组的项都要加上,交替和=奇数组总和-偶数组总和,那么如果交换的两项都同时位于奇数组或偶数组内,不能使得交替和最大。因此交换的两项必须一个位于偶数组,另一个位于奇数组。 交换之后,ans_exchanged=ans_init+2*(被交换偶数-被交换奇数) 因此,遍历偶数组,得到其减去奇数组中最小项的差,找出最大的差 注意是差最大而不是最大

2024-03-08 23:04:21 479

原创 蓝桥杯[OJ 3412]-最小化战斗力差距-CPP-贪心

首先每个值都有可能为min(b),那么对于每个可能为min(b)的值,要使得max(a)尽可能小,因此枚举所有相差最小的一对数(对输入数据先作排序,从第二个数开始遍历,同时每次枚举其前一个数),找出最小的这对数的差值即可。

2024-03-08 21:31:28 518

原创 蓝桥杯-最大的卡牌价值-CPP-贪心

【代码】蓝桥杯-最大的卡牌价值-CPP-贪心。

2024-03-08 15:17:43 551 1

原创 蓝桥杯[OJ 2928]分糖果-CPP(贪心、字典序)

其次要明白题目在说啥,实际上就是要输出一个长度最长的,字典序比其他糖果组成的字符串大的但是相差最小的字符串。比如abd字典序大于abc,但是不是字典序相差最小的(c与d),字典序相差最小的是abbcd与a(a与b)。为了方便比较,先把所有糖果按字典序排序。

2024-03-08 09:43:05 850 1

原创 编译Linux内核并修改版本号后缀为学号-Ubuntu22.04中编译安装Linux内核6.7.8

实验课要求下载最新版本Linux内核并修改版本号,本人在Vmware中Ubuntu22.04中实现,花三天时间查阅大量网站资料。记录一下误打误撞成功的过程,希望对你们有帮助。

2024-03-08 00:40:46 2152 2

原创 ubuntu中vim打开文件一片空白解决方法

若终端底部处有"新目录"或“New File”相关字样,说明打开了新文件,这时要仔细检查路径名 权限不足,用sudo或者su

2024-03-06 20:10:53 1336 1

原创 离散化-CPP-Vector容器类和静态数组的两种实现方法(可作为模板)

离散化就是将一个元素数值相差巨大的数组转换为一个用前者元素的大小名次为内容的数组,相当于用元素间的大小名次替换元素本身,类似哈希表。举例子就是将数组arr{-100,1231231,0,7,7}转换为v{0,3,1,2,2},Vector容器类实现比较方便。

2024-03-04 21:47:01 450

原创 蓝桥杯[OJ3694]肖恩的投球游戏加强版-CPP(差分矩阵两种解法详解)

遍历每一行,只需要在diff[][]的每一行的y1处加上c,每一行的y2+1处减去c。按照一维差分数组的方法去做。首先要知道由于一维数组时,另外根据差分数组性质,为右下角的矩阵的元素之和。为右下角的矩阵,对其中所有。最后要加回减多的部分即。

2024-03-03 23:48:08 499

空空如也

空空如也

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

TA关注的人

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