- 博客(57)
- 收藏
- 关注
原创 [HOT 100]今日一练------颜色分类
0, left)全为0 | [left, i)全为1 | [i, right]为未排序部分。对于右交换来说,因为right代表的值处[i, right)是未排序部分,因此交换到i的值不移动,i就不应该移动。对于左交换来说,因为left代表的值处[left, i)全是1,因此交换到i的一定为1,i可以移动。经典荷兰国旗问题,采用三指针来解决,
2026-05-11 11:12:31
27
原创 [HOT 100]今日一练------编辑距离
主要是要考虑空字符串的情况,以word1 = "horse", word2 = "ros"为例。类似于LCS的填表题,多维动态规划,
2026-05-08 11:19:16
25
原创 [HOT 100]今日一练------最长公共子序列
LCS模板题,多维动态规划:dp[i][j]中i表示text1,j表示text2。以text1 = abcde, text2 = ace为例则填表如下。
2026-05-07 10:16:09
38
原创 [HOT 100]今日一练------最长回文子串
所谓的中心拓展法就是选取一个中点,以这个中点为中心同时向左右拓展看每个串是不是回文串以此来找到最长的回文串,但是这里分。则是,我们在枚举不同中心时会得到不同长度的回文串,我们要维护一个。"abba":形如这样的串中心是bb。"aba":形如这样的串中心是b。
2026-05-06 10:58:48
25
原创 [HOT 100]今日一练------乘积最大子数组
因此我们要维护max来保存第一种情况,维护min来保存第二种情况;每一次我们就找max/min, max*nums[i], min*nums[i]这三个数中最大/最小值与当前数进行比较找最大/最小值即可。动态规划,维护三个值max, min, result。
2026-04-27 10:08:59
21
原创 [HOT 100]今日一练------最长递增子序列
动态规划,dp[i]表示将nums[i]作为子序列的最后一个数字时的最长严格递增子序列的长度。的时候应该把每一个dp[i]置为1,因为每个位置的数字都是自己的子序列。由于我们必须要把nums[i]放在后面,因此我们要。,所以要找前面所有满足 nums[j] <由于dp[i]的意义,我们在做。,取最大的那个 +1。
2026-04-24 14:09:35
32
原创 [HOT 100]今日一练------单词拆分
的话我们只需要把dp[0] = true,因为空字符串天然不需要划分。,那么就说明当前位置可以作为一个切点,因此dp[i] = true。
2026-04-23 11:26:10
84
原创 算法训练Day10 | LeetCode 169 多数元素
的题,在这里我推荐一个up的视频,链接我贴在下方了。这里我就不过多赘述了,他讲的已经非常好了。这个题是非常经典的可以运用。
2026-04-21 10:40:48
46
原创 [HOT 100]今日一练------完全平方数
那么据上述我们可以发现,为了实现以上思路,我们必须要有每个dp[i]的值,且我们要列举不同的完全平方数,因此我们需要用两层循环来进行实现。最坏的情况应该为这个数全部用1来凑,因此我们。
2026-04-21 10:31:45
38
原创 [HOT 100]今日一练------打家劫舍
由上述两种情况我们便可以得到我们的动态转移方程,在此之前我们先引入。的时,在正式进行动态规划之前我们要先进行。
2026-04-20 10:26:09
47
原创 [HOT 100]今日一练------跳跃游戏
的贪心策略,假设当前位置为i,则当i = currentend时我们才发出跳动作。该题我们将使用线性贪心,主要维护三个核心的值。
2026-04-16 11:27:29
32
原创 LabradoMQ[自定义消息队列]测试报告篇
测试概述LabradoMQ左晓凤1.3产品项目背景在探究并发编程中的阻塞队列这一结构时,我发现其核心价值在于为“生产者-消费者”这一经典协作范式提供了现成的实现基础。,使得数据生产方与消费方能够独立演进。,能有效应对瞬时负载,提升系统整体的弹性。在分布式架构的实践中,这一模式的应用超越了单一进程的边界,成为不同服务或主机间进行异步通信的常见设计。为了满足这种跨网络的、更复杂的协作需求,我们通常会将基础的队列机制进行服务化改造,将其部署为独立的、功能更完备的中间件。
2026-01-07 13:04:24
764
原创 线程P6 | 线程池的理解+模拟实现线程池
老规矩,在正式介绍这个东西之前,我们还是先给大家先简单介绍一下啥是线程池线程池是一种多线程处理技术,它通过预先创建一组可复用的线程,来高效地管理和执行多个任务,避免频繁创建和销毁线程带来的性能开销。嘶...看起来感觉好复杂呢.....其实直白说来,就是你把线程池想象成鱼塘,里面的一个一个线程就是一条条你养的🐟,在线程里面有个阻塞队列,里面装满了任务,就好比是一条条蚯蚓,你开始往里面丢蚯蚓,🐟就会一条条来抢,一条抢到了这个蚯蚓,其它鱼就只能等着下一条蚯蚓来了~~而正在吃蚯蚓的鱼呢,也不会去参与争抢。
2025-08-16 14:34:09
767
原创 线程P5 | 单例模式[线程安全版]~懒汉 + 饿汉
在我们正式讲解单例模式之前,没有了解过的小伙伴可能会有疑问...到底啥叫单例模式??其实单例模式呢,是我们设计模式中的一种,所谓的设计模式,你可以把它理解为一个模板,也就是你在实现某种业务的时候,选择适配的设计模式,根据这个模板来改你对应的业务代码Java设计模式是解决特定软件设计问题的经典、可复用的方案模板,分为创建型、结构型和行为型三大类,帮助开发者编写更灵活、可维护的代码。那么我们的单例模式呢,指的是实例对象只会被创建一次这样的设计模式~~饿汉模式和懒汉模式。
2025-08-15 17:25:41
1434
原创 48Days-Day19 | ISBN号,kotori和迷宫,矩阵最长递增路径
问题的扩展,原理都差不多,就是最后输出的时候单独要多记录一下出口数量而已。的时候要特别判断一下是不是X就行了。模拟,根据题意模拟就可以了,
2025-08-15 16:41:44
447
原创 线程P4 | 线程安全问题及解决方法
比如你想要追求你的crush~~她有对象的时候,就相当于她加上锁了,按理来说,你就不能再追求她了,但是如果她分手了,又回归了单身状态,那就是锁解除啦,然后你就可以追求她了,你们在一起之后,就相当于你竞争到了这把锁,那其它人就不能追求你的crush啦,除非你俩又分手了,她又回归了单身状态,那么别人就可以又来竞争这把锁,此时"男朋友"这个身份就是那把锁~~~指令重排序实际上也是编译器优化代码的一种方式,保证逻辑不变的前提下,调整原有代码的执行顺序,提高程序的效率,自然,指令顺序都发生了改变,安全也无法保证。
2025-08-14 18:03:10
1226
原创 线程P3 | 线程的状态及状态间的转换(jconsole + 代码讲解版)
可能有很多小伙伴是第一次接触到jconsole这个东西,都有点疑惑,这是个啥玩意儿?所以在正式讲解状态之前,我们先来了解一下啥是jconsole~~~其实通俗一点来讲,所谓的jconsole,就是java给我们提供的一个查看线程状态的工具,如果你没有移动java的安装位置,那么应该差不多和我在同一个位置,如果移动了位置,就找到你安装java的位置,打开你jdk的文件夹,后面的路径和我的相同~~我们来演示一下怎么使用这个工具,这里我写了一个死循环的线程代码try {});t.start();
2025-08-13 12:04:06
815
原创 48Days-Day18 | 素数回文,活动安排,合唱团
在推出动态转移方程之前我们要知道,题目中是有d这个限制的,因此事实上,由于最后一个人是必选,所以应该是在[i-d, i-1]这个范围里面选j-1个人,不过由于这道题要求我们要求出具体最多有几个活动可以参加,因此我们在找到重合区间的基础上要用贪心更新区间右端点的最小值,这样才能保证选到更多的活动。由于我们不知道这个位置的数的正负情况,因此我们把和最大值相乘与最小值相乘求个最大值就行了。区间排序 + 贪心,整体思路和我下面这篇文章里的主持人调度(一)这道题差不多。这个题的数据范围是比较大的,所以要用Long。
2025-08-13 10:52:54
893
原创 线程P2 | Thread类的基本用法
通过上述创建过程,我们可以发现,要实现线程的创建和运行,需要start()方法和run()方法的共同协作,那么也许大家会有疑问,这两个方法到底有什么区别呢,可以混用吗?但是要注意的是,此处结果肯定不一定是2000,因为创建线程,启动main等等之类的行为也是需要时间的,所以我们只是保证一定会 >= 2000就说明确实是有休眠存在的~~有的时候,我们有的线程需要等待其它线程做完工作之后,才开始被执行,这个时候,我们称它需要等待其它线程,而要实现这样的功能,就需要用到。方法,老规矩,我们还是上情景~~
2025-08-12 16:03:44
1077
原创 48Days-Day17 | 小红的口罩,数位染色,春游
小根堆 + 贪心,每次都找舒适度最小的口罩来戴,就可以撑的越久,所以我们用小根堆来存放每次的舒适度,每次要用口罩就取栈顶元素,用完把。dp,分割等和子集的变形,只是要处理一下字符串,详细讲解请大家参考我下面这篇文章,这里我就不多赘述了。当人数不是刚好可以全部坐双人船或者三人船的时候,我们要特殊讨论一下边界情况。模拟 + 分情况讨论。
2025-08-12 14:47:18
360
原创 48Days-Day16 | 排序子序列,消减整数,最长上升子序列
模拟,这个序列的走势一共有三种情况,一种是上升,一种是下降,还有一种是相等;相等的时候不算是一种结果,只需判断相等之后的趋势和那个趋势合并就可以了。根据数学知识我们可以知道,只有在n % (2 * preNum) == 0的时候,n才能减去这么多直到0,否则会大于或等于0,无法刚好达到0。我们只需要直到每一种子序列长度的最小末尾就可以了,每一次到新的数就插入到对于长度的最小末尾。由图我们可以知道,一个数减的情况只有两种,由于我们需要以最少的次数减到0,在while循环里面要记得判断边界情况。
2025-08-08 12:47:28
312
原创 48Days-Day15 | 游游的重组偶数,体操队形,二叉树中的最大路径和
模拟,这里我的思路是,一个位上是偶数的情况就只有{0, 2, 4, 6, 8},所有先把它们放进一个set里面,如果那个数里面有一位包含在set里面,就把这一位和最后一位交换一下,就是偶数了,但是为了。的情况,我们应该先判断原数是不是偶数,如果是可以不用进行后面的操作。,这里我取得-1010,因为值的范围为[-1000, 1000]图为输入示例的决策树简示,大家可以根据图来理解一下剪枝的意思。dfs,,递归每一位放的数,这里我只提一下剪枝策略,如果。由于这道题的结果有可能为负数,所以。
2025-08-07 11:50:36
369
原创 48Days-Day14 | 小红的ABC,不相邻取数,空调遥控
以滑动窗口来实现枚举回文字符串长度,超出该次枚举长度,就出窗口缩小窗口大小,在窗口大小正好为枚举长度是,就开始判断该窗口是否为回文字符串,如果是,直接跳出循环就可以了,不需要再继续往后枚举,因为后面一定会更大嘛~~我们在dp过程中用到了i-1和i-2位置,所以这道题要单独初始化一下,dp[0] = nums[0];排序 + 滑动窗口,由题目中的信息我们可以知道,要满足|a[i] - K| <= p,我们的温度应该控制在[k-p, k+p]区间,即。为2p内,所以我们可以通过滑动窗口来实现区间差值的控制~~
2025-08-05 13:27:35
451
原创 Spring P1 | 创建你的第一个Spring MVC项目(IDEA图文详解版,社区版专业版都有~)
那么事实上,我们可以发现,这个网址是在国外的,因此我们在真正使用并需要从中央仓库下载时会发现,特别的慢,那么为了解决这个问题,国内一些厂商就做了中央仓库的镜像仓库,它包含了中央仓库中的所有内容,访问速度可以大大提升,因此我们就需要配置国内的Maven仓库,这里我们以。如果pom.xml中有报红,那么多半是依赖导入的问题,检查Maven仓库配置,多刷新Maven,如果都没问题依旧报红,那么可能是version问题,在中央仓库中去找对应的jar包有没有你那个版本,修改,刷新,
2025-08-04 22:53:47
1898
2
原创 48Days-Day13 | 笨小猴,主持人调度(一),分割等和子集
在写动态转移方程的时候注意初始化问题,因为boolean默认为false,所以我们要把dp[0][0]初始化为true,还有dp数组与原数组的下标对应问题。动态规划-01背包变形,由于对于每一个数来说都只有选或者不选两种状态所以是01背包变形。模拟 + 数学,就遍历统计一下maxn和minn,然后判断两者之差是不是质数就可以了。排序,按照区间左端点进行排序,如果区间有重合的地方,即。,即说明为false,否则为true。如下图所示,此时有重合区间。
2025-08-04 10:07:42
502
原创 48Days-Day12 | 添加字符,数组变换,装箱问题
贪心,找到最大的那个数,找到每个数和最大的那个数的商是不是2的倍数,这里我们用到了lowbite的方法移位,如果是就说明可以变到最大的数,不能就不行。因为本题数据量都比较小,所以我们可以直接使用暴力解法,枚举B字符串的每一个位置作为与A字符串比较的起点,维护一个最小位数的值。其实就是01背包模板的变形。
2025-08-02 11:05:04
277
原创 48Days-Day11 | 爱丽丝的人偶,集合,最长回文子序列
贪心,本题有多种策略,我采用的策略是先小后大,那么第一个位置(为方便叙述,我们记为i)我们一定会放最小的人偶,接下来nums[i+1]则必须 > nums[i],比它大的有很多,但因为nums[i+2]必须小于nums[i+1],所以我们应该使得nums[i+1]尽可能的大,也就是说,我们的顺序应该是。填表时,事实上如下图,假设我们要填红色的位置,那么根据状态转移方程,我们需要得到它左边和下边位置的dp值,因此我们在填表时,填表顺序应该从下到上,从左到右。
2025-07-31 09:56:19
282
原创 HTML基础P2 | JS基础讲解
JS是一个网页的脚本语言,你可以理解为在HTML中写类似于JAVA等高级编程语言的代码,使得网页可以实现一些包含逻辑处理的交互操作由于原生JS在实践过程中非常的冗余复杂,因此一种新的JS框架应运而生,即JQuery,它可以简化我们对于JS的应用和代码。
2025-07-30 21:12:20
1066
2
原创 48Days-Day10 | 经此一役小红所向无敌,连续子数组最大和,非对称之美
找规律,事实上有点类似贪心的想法,如果整个字符串不是回文串,那么最长的必定是它自己,如果整个字符串是回文串,那么实际上,最长的就是整个字符串长度-1,因为去掉其中一个字符就不是回文串了。模拟,就是模拟战役过程,先同时攻击,然后互相攻击,攻击完之后看有人死了没,死了再做对应操作。有特殊情况,如果整个字符串都是同一个字符,那么就没有非回文字符串,即输出0。该题数据量还是比较大的,要开long。
2025-07-30 12:35:34
263
原创 48Days-Day09 | 小易的升级之路,礼物的最大价值,对称之美
双指针 + 哈希,事实上就是回文字符串模板的拓展版,只是这次左右指针指向的是一整个字符串,左右指针一头一尾,先统计左指针所指字符串里面有些什么字符,再判断右指针里面有没有相同的字符,有就说明可以继续判断下一个,left++, right--;一直到最后都有相同的,那么就要么left == right,要么left > right,即两指针错开,否则就说明中途跳出了循环,那就是有不相同的地方,就不能构成回文。数学 + 模拟,gcd模板,用欧几里得算法递归,递归结束条件是当b == 0时,return a;
2025-07-28 23:24:34
240
原创 线程P1 | 认识进程和线程,进程和线程之间的区别与联系
在本博客中,我们将会以一个实际生活中的例子来为大家介绍进程与线程的区别与联系。想象现在我们新买下来了一个商场,我们叫它。,即招租,商铺入住咱们商城之后呢,我们会给它们。,而商铺呢,则会为顾客提供买卖东西的。现在我们准备给商城引入一些。
2025-07-28 14:49:13
476
原创 48Days-Day08 | 压缩字符串(一),chika和蜜柑,01背包模板
字符串模拟,从第一位开始统计,当前位置字符和前面那个位置字符是否相等,维护一个count,来计算相等位数,不相等时则要开始准备输出,如果count > 1,说明这一段字符要压缩,那么就输出。在输入酸度和甜度的时候,要用两个不同的循环,不能在同一个循环中完成,不然会按输入顺序存储数据,而不是一一对应。topK排序,将一个蜜柑的酸度和甜度看作一个整体,按照以下规则来重写比较。要单独处理一下最后一位字符,看要不要拼接最后的数字。,反之则说明只有一个,则只需要输出。01背包模板,这里就不多赘述了。
2025-07-27 11:53:10
374
原创 48Days-Day07 | 小乐乐改数字,十字爆破,比那名居的桃子
类似于前缀和的预处理+模拟,先分别求出每一行每一列的和并放在一个数组里面,遍历二维数组时,到哪个数就取哪个数所在那一行那一列数组里面对应的和的值即可。原题里面是从第一天开始的,所以更新吃桃日期的时候要记得 + 1,才是对应天数,或者最后输出结果的时候 + 1;或者数组下标从1开始处理。模拟,就是一个遍历然后替换。注意前导零要变为一个0。
2025-07-26 15:20:24
321
原创 48Days-Day06 | 字符串替换,神奇数,DNA序列
组装两位数时,把这个数先转换成一个数字的数组,用i表示十位数字,j表示个位数字,当i == 0时,或者i == j,即i, j指向同一个位置时,不组装,其它时候组装成一个两位数,并传入质数判断函数中判断是否为质数。模拟,把题目中给的字符数组先放入队列中,遍历字符串,如果遇到%,就把这个位置和它的下一个位置替换成队列中的队首元素,遍历结束后,如果队列不为空,则说明还有字符,就拼接在字符串末尾。滑动窗口(定长窗口,应该为要求的长度)
2025-07-25 19:39:34
322
原创 48Days-Day05 | 平方数,分组,拓扑排序
暴力枚举,枚举每个组最多有多少人,根据这个人数算出每类可以分为多少个小组,当所有类型的小组和<=要求的组数时,就说明这个结果成立。数学,先对这个数开根号,取整,求根号值与根号值+1分别的平方,再比较与原数的距离得出结果。采用二分来优化寻找组的过程。
2025-07-25 14:56:02
219
原创 48Days-Day04 | 乒乓球筐,组队竞赛,删除相邻数字的最大分数
贪心,每次尽可能地找第二个数最大的情况,我们引入三个指针left, mid, right,left为一组中最小的值,right为一组中最大的值,mid为中间值,即一组中我们需要的结果,那么在数组有序的情况下,我们只需要每次left++,mid = right-1,然后mid和right同时作为一个整体左移就可以保证贪心策略。用一个数组sum来统计每个数字的和,在选中该数字的时候,它的前一个数字就不能被选中,于是我们用两个数组f, g;当不选择i位置时,i-1位置可以选,可以不选,所以。
2025-07-24 15:09:12
282
原创 48Days-Day03 | 删除公共字符,两个链表的第一个公共结点,mari和shiny
直接哈希,把第二个字符塞集合里面,遍历第一个,只要在集合里面有的就跳过。此处我们采用快慢指针法,具体讲述请参考我的博客。存储结果的长度应该为long,否则会溢出。此处我们采用的是dp。
2025-07-19 22:52:38
613
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅