- 博客(42)
- 收藏
- 关注
原创 线程P6 | 线程池的理解+模拟实现线程池
老规矩,在正式介绍这个东西之前,我们还是先给大家先简单介绍一下啥是线程池线程池是一种多线程处理技术,它通过预先创建一组可复用的线程,来高效地管理和执行多个任务,避免频繁创建和销毁线程带来的性能开销。嘶...看起来感觉好复杂呢.....其实直白说来,就是你把线程池想象成鱼塘,里面的一个一个线程就是一条条你养的🐟,在线程里面有个阻塞队列,里面装满了任务,就好比是一条条蚯蚓,你开始往里面丢蚯蚓,🐟就会一条条来抢,一条抢到了这个蚯蚓,其它鱼就只能等着下一条蚯蚓来了~~而正在吃蚯蚓的鱼呢,也不会去参与争抢。
2025-08-16 14:34:09
735
原创 线程P5 | 单例模式[线程安全版]~懒汉 + 饿汉
在我们正式讲解单例模式之前,没有了解过的小伙伴可能会有疑问...到底啥叫单例模式??其实单例模式呢,是我们设计模式中的一种,所谓的设计模式,你可以把它理解为一个模板,也就是你在实现某种业务的时候,选择适配的设计模式,根据这个模板来改你对应的业务代码Java设计模式是解决特定软件设计问题的经典、可复用的方案模板,分为创建型、结构型和行为型三大类,帮助开发者编写更灵活、可维护的代码。那么我们的单例模式呢,指的是实例对象只会被创建一次这样的设计模式~~饿汉模式和懒汉模式。
2025-08-15 17:25:41
1407
原创 48Days-Day19 | ISBN号,kotori和迷宫,矩阵最长递增路径
问题的扩展,原理都差不多,就是最后输出的时候单独要多记录一下出口数量而已。的时候要特别判断一下是不是X就行了。模拟,根据题意模拟就可以了,
2025-08-15 16:41:44
415
原创 线程P4 | 线程安全问题及解决方法
比如你想要追求你的crush~~她有对象的时候,就相当于她加上锁了,按理来说,你就不能再追求她了,但是如果她分手了,又回归了单身状态,那就是锁解除啦,然后你就可以追求她了,你们在一起之后,就相当于你竞争到了这把锁,那其它人就不能追求你的crush啦,除非你俩又分手了,她又回归了单身状态,那么别人就可以又来竞争这把锁,此时"男朋友"这个身份就是那把锁~~~指令重排序实际上也是编译器优化代码的一种方式,保证逻辑不变的前提下,调整原有代码的执行顺序,提高程序的效率,自然,指令顺序都发生了改变,安全也无法保证。
2025-08-14 18:03:10
1188
原创 线程P3 | 线程的状态及状态间的转换(jconsole + 代码讲解版)
可能有很多小伙伴是第一次接触到jconsole这个东西,都有点疑惑,这是个啥玩意儿?所以在正式讲解状态之前,我们先来了解一下啥是jconsole~~~其实通俗一点来讲,所谓的jconsole,就是java给我们提供的一个查看线程状态的工具,如果你没有移动java的安装位置,那么应该差不多和我在同一个位置,如果移动了位置,就找到你安装java的位置,打开你jdk的文件夹,后面的路径和我的相同~~我们来演示一下怎么使用这个工具,这里我写了一个死循环的线程代码try {});t.start();
2025-08-13 12:04:06
781
原创 48Days-Day18 | 素数回文,活动安排,合唱团
在推出动态转移方程之前我们要知道,题目中是有d这个限制的,因此事实上,由于最后一个人是必选,所以应该是在[i-d, i-1]这个范围里面选j-1个人,不过由于这道题要求我们要求出具体最多有几个活动可以参加,因此我们在找到重合区间的基础上要用贪心更新区间右端点的最小值,这样才能保证选到更多的活动。由于我们不知道这个位置的数的正负情况,因此我们把和最大值相乘与最小值相乘求个最大值就行了。区间排序 + 贪心,整体思路和我下面这篇文章里的主持人调度(一)这道题差不多。这个题的数据范围是比较大的,所以要用Long。
2025-08-13 10:52:54
873
原创 线程P2 | Thread类的基本用法
通过上述创建过程,我们可以发现,要实现线程的创建和运行,需要start()方法和run()方法的共同协作,那么也许大家会有疑问,这两个方法到底有什么区别呢,可以混用吗?但是要注意的是,此处结果肯定不一定是2000,因为创建线程,启动main等等之类的行为也是需要时间的,所以我们只是保证一定会 >= 2000就说明确实是有休眠存在的~~有的时候,我们有的线程需要等待其它线程做完工作之后,才开始被执行,这个时候,我们称它需要等待其它线程,而要实现这样的功能,就需要用到。方法,老规矩,我们还是上情景~~
2025-08-12 16:03:44
1050
原创 48Days-Day17 | 小红的口罩,数位染色,春游
小根堆 + 贪心,每次都找舒适度最小的口罩来戴,就可以撑的越久,所以我们用小根堆来存放每次的舒适度,每次要用口罩就取栈顶元素,用完把。dp,分割等和子集的变形,只是要处理一下字符串,详细讲解请大家参考我下面这篇文章,这里我就不多赘述了。当人数不是刚好可以全部坐双人船或者三人船的时候,我们要特殊讨论一下边界情况。模拟 + 分情况讨论。
2025-08-12 14:47:18
343
原创 48Days-Day16 | 排序子序列,消减整数,最长上升子序列
模拟,这个序列的走势一共有三种情况,一种是上升,一种是下降,还有一种是相等;相等的时候不算是一种结果,只需判断相等之后的趋势和那个趋势合并就可以了。根据数学知识我们可以知道,只有在n % (2 * preNum) == 0的时候,n才能减去这么多直到0,否则会大于或等于0,无法刚好达到0。我们只需要直到每一种子序列长度的最小末尾就可以了,每一次到新的数就插入到对于长度的最小末尾。由图我们可以知道,一个数减的情况只有两种,由于我们需要以最少的次数减到0,在while循环里面要记得判断边界情况。
2025-08-08 12:47:28
295
原创 48Days-Day15 | 游游的重组偶数,体操队形,二叉树中的最大路径和
模拟,这里我的思路是,一个位上是偶数的情况就只有{0, 2, 4, 6, 8},所有先把它们放进一个set里面,如果那个数里面有一位包含在set里面,就把这一位和最后一位交换一下,就是偶数了,但是为了。的情况,我们应该先判断原数是不是偶数,如果是可以不用进行后面的操作。,这里我取得-1010,因为值的范围为[-1000, 1000]图为输入示例的决策树简示,大家可以根据图来理解一下剪枝的意思。dfs,,递归每一位放的数,这里我只提一下剪枝策略,如果。由于这道题的结果有可能为负数,所以。
2025-08-07 11:50:36
354
原创 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
427
原创 Spring P1 | 创建你的第一个Spring MVC项目(IDEA图文详解版,社区版专业版都有~)
那么事实上,我们可以发现,这个网址是在国外的,因此我们在真正使用并需要从中央仓库下载时会发现,特别的慢,那么为了解决这个问题,国内一些厂商就做了中央仓库的镜像仓库,它包含了中央仓库中的所有内容,访问速度可以大大提升,因此我们就需要配置国内的Maven仓库,这里我们以。如果pom.xml中有报红,那么多半是依赖导入的问题,检查Maven仓库配置,多刷新Maven,如果都没问题依旧报红,那么可能是version问题,在中央仓库中去找对应的jar包有没有你那个版本,修改,刷新,
2025-08-04 22:53:47
1831
2
原创 48Days-Day13 | 笨小猴,主持人调度(一),分割等和子集
在写动态转移方程的时候注意初始化问题,因为boolean默认为false,所以我们要把dp[0][0]初始化为true,还有dp数组与原数组的下标对应问题。动态规划-01背包变形,由于对于每一个数来说都只有选或者不选两种状态所以是01背包变形。模拟 + 数学,就遍历统计一下maxn和minn,然后判断两者之差是不是质数就可以了。排序,按照区间左端点进行排序,如果区间有重合的地方,即。,即说明为false,否则为true。如下图所示,此时有重合区间。
2025-08-04 10:07:42
480
原创 48Days-Day12 | 添加字符,数组变换,装箱问题
贪心,找到最大的那个数,找到每个数和最大的那个数的商是不是2的倍数,这里我们用到了lowbite的方法移位,如果是就说明可以变到最大的数,不能就不行。因为本题数据量都比较小,所以我们可以直接使用暴力解法,枚举B字符串的每一个位置作为与A字符串比较的起点,维护一个最小位数的值。其实就是01背包模板的变形。
2025-08-02 11:05:04
258
原创 48Days-Day11 | 爱丽丝的人偶,集合,最长回文子序列
贪心,本题有多种策略,我采用的策略是先小后大,那么第一个位置(为方便叙述,我们记为i)我们一定会放最小的人偶,接下来nums[i+1]则必须 > nums[i],比它大的有很多,但因为nums[i+2]必须小于nums[i+1],所以我们应该使得nums[i+1]尽可能的大,也就是说,我们的顺序应该是。填表时,事实上如下图,假设我们要填红色的位置,那么根据状态转移方程,我们需要得到它左边和下边位置的dp值,因此我们在填表时,填表顺序应该从下到上,从左到右。
2025-07-31 09:56:19
264
原创 HTML基础P2 | JS基础讲解
JS是一个网页的脚本语言,你可以理解为在HTML中写类似于JAVA等高级编程语言的代码,使得网页可以实现一些包含逻辑处理的交互操作由于原生JS在实践过程中非常的冗余复杂,因此一种新的JS框架应运而生,即JQuery,它可以简化我们对于JS的应用和代码。
2025-07-30 21:12:20
1047
2
原创 48Days-Day10 | 经此一役小红所向无敌,连续子数组最大和,非对称之美
找规律,事实上有点类似贪心的想法,如果整个字符串不是回文串,那么最长的必定是它自己,如果整个字符串是回文串,那么实际上,最长的就是整个字符串长度-1,因为去掉其中一个字符就不是回文串了。模拟,就是模拟战役过程,先同时攻击,然后互相攻击,攻击完之后看有人死了没,死了再做对应操作。有特殊情况,如果整个字符串都是同一个字符,那么就没有非回文字符串,即输出0。该题数据量还是比较大的,要开long。
2025-07-30 12:35:34
245
原创 48Days-Day09 | 小易的升级之路,礼物的最大价值,对称之美
双指针 + 哈希,事实上就是回文字符串模板的拓展版,只是这次左右指针指向的是一整个字符串,左右指针一头一尾,先统计左指针所指字符串里面有些什么字符,再判断右指针里面有没有相同的字符,有就说明可以继续判断下一个,left++, right--;一直到最后都有相同的,那么就要么left == right,要么left > right,即两指针错开,否则就说明中途跳出了循环,那就是有不相同的地方,就不能构成回文。数学 + 模拟,gcd模板,用欧几里得算法递归,递归结束条件是当b == 0时,return a;
2025-07-28 23:24:34
221
原创 线程P1 | 认识进程和线程,进程和线程之间的区别与联系
在本博客中,我们将会以一个实际生活中的例子来为大家介绍进程与线程的区别与联系。想象现在我们新买下来了一个商场,我们叫它。,即招租,商铺入住咱们商城之后呢,我们会给它们。,而商铺呢,则会为顾客提供买卖东西的。现在我们准备给商城引入一些。
2025-07-28 14:49:13
457
原创 48Days-Day08 | 压缩字符串(一),chika和蜜柑,01背包模板
字符串模拟,从第一位开始统计,当前位置字符和前面那个位置字符是否相等,维护一个count,来计算相等位数,不相等时则要开始准备输出,如果count > 1,说明这一段字符要压缩,那么就输出。在输入酸度和甜度的时候,要用两个不同的循环,不能在同一个循环中完成,不然会按输入顺序存储数据,而不是一一对应。topK排序,将一个蜜柑的酸度和甜度看作一个整体,按照以下规则来重写比较。要单独处理一下最后一位字符,看要不要拼接最后的数字。,反之则说明只有一个,则只需要输出。01背包模板,这里就不多赘述了。
2025-07-27 11:53:10
353
原创 48Days-Day07 | 小乐乐改数字,十字爆破,比那名居的桃子
类似于前缀和的预处理+模拟,先分别求出每一行每一列的和并放在一个数组里面,遍历二维数组时,到哪个数就取哪个数所在那一行那一列数组里面对应的和的值即可。原题里面是从第一天开始的,所以更新吃桃日期的时候要记得 + 1,才是对应天数,或者最后输出结果的时候 + 1;或者数组下标从1开始处理。模拟,就是一个遍历然后替换。注意前导零要变为一个0。
2025-07-26 15:20:24
300
原创 48Days-Day06 | 字符串替换,神奇数,DNA序列
组装两位数时,把这个数先转换成一个数字的数组,用i表示十位数字,j表示个位数字,当i == 0时,或者i == j,即i, j指向同一个位置时,不组装,其它时候组装成一个两位数,并传入质数判断函数中判断是否为质数。模拟,把题目中给的字符数组先放入队列中,遍历字符串,如果遇到%,就把这个位置和它的下一个位置替换成队列中的队首元素,遍历结束后,如果队列不为空,则说明还有字符,就拼接在字符串末尾。滑动窗口(定长窗口,应该为要求的长度)
2025-07-25 19:39:34
302
原创 48Days-Day05 | 平方数,分组,拓扑排序
暴力枚举,枚举每个组最多有多少人,根据这个人数算出每类可以分为多少个小组,当所有类型的小组和<=要求的组数时,就说明这个结果成立。数学,先对这个数开根号,取整,求根号值与根号值+1分别的平方,再比较与原数的距离得出结果。采用二分来优化寻找组的过程。
2025-07-25 14:56:02
206
原创 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
262
原创 48Days-Day03 | 删除公共字符,两个链表的第一个公共结点,mari和shiny
直接哈希,把第二个字符塞集合里面,遍历第一个,只要在集合里面有的就跳过。此处我们采用快慢指针法,具体讲述请参考我的博客。存储结果的长度应该为long,否则会溢出。此处我们采用的是dp。
2025-07-19 22:52:38
581
2
原创 48Days-Day02 | 游游的水果礼包,买卖股票II,倒置字符串
这个题比起Dya01的I的区别时,这题可以无限次进行买卖,所有我们只要股票的价格有上升,就把利润全部拿到手。由此我们可以知道,只要求出x和y的值就可以得到对应的价值,因此我们此处枚举x所有可能的取值,并找到对应的y。非常简单常规的一道字符串处理题,按照空格分隔字符串,逆序遍历字符串并拼接成一个新字符串即可。该字符串末尾是没有空格的,因此要单独处理一下,此处采用的是正则表达式来去除的。枚举,将获得最后的价值看为一个一元二次方程组。
2025-07-19 11:50:27
241
2
原创 48Days-Day01 | 最长回文子串,股票买卖问题I,过河卒
贪心算法,我们将第i天视为卖出股票的日子,那么对于第i天来说,如果选择这天卖出股票,那么应该在[0, i]天内选择一个最低点买入股票,此时就可以获得最大利润,因此我们只需要维护好一个min值,确保我们知道第[0, i]天中的最低点即可。使用中心扩展算法,如:假设此时我们有一个字符串bbabb,那么我们假设从a开始枚举,就创建一个left指针和一个right指针,同时向两边扩散判断是否相等以此来判断是否为回文串,因此我们只需要枚举所有的中心点,然后向两边扩散。
2025-07-18 13:59:14
393
2
原创 递归P1 | 斐波那契;费解的开关
把经典反式递归的思路逆向化一下,即正向递推,F[n] = F[n-1] + F[n-2], 这样的思路来用循环求解第n个数的值。个人认为注意点不是很多,我个人踩坑的地方是开辟数组长度的时候是。
2025-03-06 23:45:57
297
原创 算法训练Day09 | LeetCode 20 有效的括号, LeetCode 232 用栈实现队列, LeetCode 225 用队列实现栈, LeetCode 1047 删除字符串中相邻重复项
每次获取的元素,由于是使用的charAt,所以此时是char,判断是否相等要用'',而且是==,而非equals()最后返回结果的时候要把res.toString(),因为题目要求的返回类型是String。每次插入一个元素之后就重新排一次顺序,使它拥有像栈一样的。
2025-02-26 23:35:22
342
原创 算法训练Day08 | LeetCode 151 反转字符串中的单词, 右旋字符串
今天的练习中,对于我来说印象最深刻的就是151的第二种解法,一是这是快慢指针的一个很妙的用法,二是这是一种新的解题想法,除了说可以正向的去思考,还可以逆向思考,就像这道题看作是倒着的单词拼接而不一定要是正向得思考如何变成逆序模样。
2025-02-24 23:36:52
305
原创 算法训练Day07 | LeetCode 344 反转字符串, LeetCode 541 反转字符串II, 替换数字
今天的重点主要是反转字符串,基本的和进阶版,当然,对于正则表达式也有了初步的了解。
2025-02-23 23:27:57
448
原创 算法训练Day06 | LeetCode 15 三数和, LeetCode 18 四数和, LeetCode 383赎金信, LeetCode 454 四数相加
这次最大的收获是了解到了分组、剪枝和去重操作,在写代码的过程中要考虑全面一点,多注意细节,比如在写四数和的时候,我判断sum写成了>0, <0,完全沉浸在三数和的影响中,所以需要注意,以后应该保持更清醒的头脑。
2025-02-22 23:47:18
841
原创 算法训练Day05 | LeetCode 1 两数之和, LeetCode 202 快乐数, LeetCode 242 字母异位词, LeetCode 349 两个数组的交集
今天主要是关于哈希表的应用,set只有值且自然去重,map是键值对,键不可重复,值可重复,对于查找需求比较大的情况下建议使用哈希表。
2025-02-18 18:01:38
962
原创 Day04 | LeetCode 24 交换链表节点, LeetCode 19 删除倒N节点, LeetCode 142 环形链表, 面试题02.07 链表相交
今天主要是对于快慢指针法的理解,尤其是环形链表那道题,在做题过程中,思路固然重要,细节也绝不能放过,要注意细节。
2025-02-15 18:09:36
621
原创 Day03 | LeetCode 203 移除链表元素, LeetCode 206 反转链表, LeetCode 707 设计链表
本次的算法练习主要是针对了一些关于链表的基本操作,重点是关于链表的反转,对于虚拟头节点的应用。
2025-02-15 13:08:00
548
原创 算法训练day02 | LeetCode 209 长度最小的子数组; LeetCode 59 螺旋矩阵II; 开发商购买土地
今天的内容主要是前缀和,滑动窗口,在写开发商买土地的时候花了比较多的时间,是一道很好的利用了区间和的题,对于区间和有了更深刻的理解。
2025-02-13 18:04:58
777
6
原创 算法训练Day1: LeetCode704 二分查找, LeetCode27 移除元素, LeetCode977 有序数组的平方
二分查找法的运用双指针的运用。
2025-02-12 22:56:24
238
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅