- 博客(122)
- 收藏
- 关注
原创 LeetCode 每日一题笔记 日期:2026.09.02 题目:3875.构造奇偶一致的数组 I
直接返回常量true,省去奇偶统计、条件判断逻辑,代码极简。没有任何if分支,执行效率最高。
2026-09-03 16:09:39
177
原创 LeetCode 补拙笔记 日期:2026.09.03 题目:240.搜索二维矩阵 II
核心:最大距离等于首尾临界点位置差;最小距离是相邻临界点的位置差的最小值;优化亮点:不保存全部临界点,仅记录第一个、上一个临界点,省去集合开销;合并判断条件,减少if分支;关键点:链表头、尾节点不可能成为临界点,遍历条件要保证curr存在后继节点。
2026-08-31 19:35:51
254
原创 LeetCode 补拙笔记 日期:2026.07.13 题目:73. 矩阵置零
核心:复用矩阵首行首列作为零标记,仅两个布尔变量记录首行首列原始零状态,满足常数空间要求;优化亮点:合并三次独立预扫描为单次双层遍历,消除重复循环;倒序填充内部单元格,统一行/列标记判断逻辑,减少多层嵌套if;关键陷阱:必须先完成全部标记再置零,若提前修改首行首列会破坏标记信息。
2026-07-13 11:22:00
287
原创 LeetCode 每日一题笔记 日期:2026.06.25 题目:3737. 统计主要元素子数组数目 I
核心:数值映射转化问题为区间前缀和大于0计数;优化亮点:前缀和+哈希表消去二层循环,降低时间复杂度;减少循环嵌套分支,提升大数据下运行效率;target次数 > 子数组长度/2等价区间映射和 > 0,是解题核心数学转化。
2026-06-25 10:31:31
241
原创 LeetCode 每日一题笔记 日期:2026.06.18 题目:1344. 时钟指针的夹角
核心:通过数学公式分别计算时针、分针角度,再取最小夹角;优化亮点:用Math.min替换if判断,减少分支;拆分时针分针计算,逻辑更直观;关键公式:时针,分针6*min,最小夹角。
2026-06-22 17:43:33
244
原创 LeetCode 每日一题笔记 日期:2026.06.19 题目:1840. 最高建筑高度
核心:双向贪心修正限制高度,区间峰值公式求最大高度;优化亮点:使用一维数组分离编号与高度,减少二维数组频繁访问;合并最大值初始化逻辑,删减冗余临时变量;关键公式:两建筑区间峰值 = (建筑间距 + 左高度 + 右高度) // 2,是求解区间最高建筑的核心数学推导。
2026-06-22 17:30:12
195
原创 LeetCode 每日一题笔记 日期:2026.06.22 题目:1189. “气球”的最大数量
核心:统计关键字符频次,对l、o折半后取最小值;优化亮点:用数组替代HashMap避免字符串装箱;循环取最小值替代多段if判断,减少分支;balloon中 l、o 各需要两个,必须整除2再参与比较。
2026-06-22 16:52:41
246
原创 java虚拟机组成:虚拟机栈
局部变量表存方法参数与局部变量;操作数栈用于字节码运算临时存数据;动态链接指向常量池解析方法;返回地址记录调用处位置,方法结束后恢复上层代码执行。每个方法调用对应一个栈帧,栈帧包含五部分:局部变量表、操作数栈、动态链接、方法返回地址、附加信息。GC主要回收堆内存;栈内存不需要GC,方法执行完成栈帧直接出栈,内存自动释放。单栈内存设置越大,机器整体能创建的并发线程数量越少,会降低服务并发承载能力。不是,默认栈大小一般1024K(-Xss参数调整)。问:虚拟机栈里的栈帧存放什么?
2026-06-21 23:42:07
230
原创 LeetCode 每日一题笔记 日期:2026.06.19 题目:1732. 找到最高海拔
核心:前缀和遍历,实时维护全局最大值;Math.max替代if条件判断,精简代码,减少分支;关键点:初始最高海拔必须设为0,因为起点海拔为0,全程可能无上坡。
2026-06-21 23:41:23
237
原创 java虚拟机方法区
主要存储类元信息、类加载器、运行时常量池。class文件自带常量池,类加载后载入运行时常量池,把符号引用解析为真实内存地址。答:方法区是线程共享内存,JDK8实现为元空间,存放在本地堆外内存,JDK7及之前是堆内永久代。字节码文件内,一张符号信息表,保存未解析的符号引用:类名、方法名、字段名、字符串字面量。:将符号名转为内存真实地址,运行时直接寻址执行。类加载时,把Class常量池加载进方法区,完成。限制元空间,持续加载类后抛出。读取常量池第3号字符串。若元空间内存耗尽,抛出。,可打印完整常量池。
2026-06-21 23:29:46
193
原创 Java堆(Heap)
Java堆是线程共享内存,存放全部对象与数组,内存耗尽抛出堆OOM;堆分为年轻代、老年代:年轻代Eden+两个等量Survivor,存放新生短期对象;老年代存放长期存活老对象;JDK7存在堆内永久代,易类加载OOM;JDK8移除永久代,改用堆外本地内存元空间,规避永久代溢出问题。
2026-06-21 23:28:21
240
原创 LeetCode 每日一题笔记 日期:2026.06.21 题目:1833. 雪糕的最大数量
核心贪心:想要数量最多,必须优先选购单价最低的雪糕。优化亮点:使用计数排序替代普通快排,降低时间复杂度,符合题目强制要求;价格有序遍历,提前剪枝减少无效循环。关键约束:题目明确要求使用计数排序,不能直接调用Arrays.sort。
2026-06-21 23:27:31
214
原创 LeetCode 每日一题笔记 日期:2026.06.16 题目:3612. 字符串特殊符号处理
核心:基于可变字符串缓冲区模拟四类符号操作;优化亮点:用switch替换多层if-else,扁平化分支结构,减少条件判断层级;使用setLength简化末尾删除写法;删除操作必须判断缓冲区长度,防止下标越界。
2026-06-16 10:01:24
243
原创 LeetCode 每日一题笔记 日期:2026.06.14 题目:2130. 链表最大孪生和
核心:利用链表中点分割 + 后半段反转,实现孪生节点配对。优化点:舍弃额外容器,原地操作链表,大幅降低空间开销,同时减少多余分支判断。关键技巧:快慢指针找中点、迭代反转链表是链表类题目的常用基础操作。
2026-06-14 19:18:37
220
原创 LeetCode 补拙笔记 日期:2026.06.07 题目:283. 移动零
核心思路:利用双指针在原地完成非零元素的“前移”,同时保持其相对顺序。优化点:避免不必要的交换:仅在当前元素非零且前面存在零时才进行移动;提前预热JVM:通过静态代码块减少首次运行的性能开销;减少if分支:逻辑更紧凑,提高执行效率。j指针只在遇到非零元素时移动,保证了非零元素的相对顺序不变。
2026-06-07 21:54:07
184
原创 LeetCode 补拙笔记 日期:2026.06.07 题目:128. 最长连续序列
核心思路:利用哈希表的O1O(1)O1查询实现线性时间复杂度。优化亮点:分情况处理:根据数据密集度选择布尔数组或哈希表,减少不必要的哈希开销。开放寻址哈希表:比HashMap更快,减少了自动装箱/拆箱的开销。剪枝优化:当找到的序列长度超过数组一半时,直接返回,无需继续遍历。关键技巧:只从序列的起始点开始遍历,避免重复计算,保证了OnO(n)On的时间复杂度。
2026-06-07 21:53:36
242
原创 LeetCode 补拙笔记 日期:2026.06.07 题目:49. 字母异位词分组
排序+哈希表,用排序后的字符串作为异位词的唯一标识。优化点:使用简化哈希表操作,减少分支判断;懒加载方式延迟初始化结果列表,提升性能。关键技巧:异位词分组的核心是找到一个稳定的键,排序是最直接的实现方式。
2026-06-07 21:53:04
582
原创 LeetCode 补拙笔记 日期:2026.06.07 题目:1. 两数之和
核心:利用哈希表将查询时间降为O1O(1)O1,实现线性时间复杂度。优化:双指针遍历减少了循环次数,能更快地找到答案,代码也更紧凑。关键技巧:边遍历边存入哈希表,而不是先存后查,避免了同一元素被重复使用的问题。
2026-06-07 21:52:34
358
原创 LeetCode 每日一题笔记 日期:2026.06.06 题目:2196. 根据描述创建二叉树
通过标记“无父节点”找到根节点,同时一次性构建树结构。优化点:用数组直接存储节点,避免递归构建,减少分支判断,逻辑更简洁高效。关键技巧:根节点的识别方法是这类题的核心,利用“不会出现在子节点位置”这一特征快速定位。
2026-06-07 21:50:51
200
原创 LeetCode 每日一题笔记 日期:2026.06.04 题目:3751. 范围内总波动值 I
暴力思路:逻辑直观,适合小数范围,直接逐位判定峰谷;前缀差分+数位预处理fr−fl−1fr−fl−1求区间和,预处理预存各数位组合贡献,将复杂度从线性枚举压缩至数位对数级别;核心:单个峰谷只由连续三位决定,预处理批量统计同前缀下所有后缀的波动总和。
2026-06-04 08:33:10
206
原创 LeetCode 每日一题笔记 日期:2026.06.02 题目:3635. 最早完成陆地和水上游乐设施的时间 II
核心:拆分两种游玩顺序,分别求最优解再取最小;原版:适配数据范围偏大场景,用排序二分优化枚举;优化版:贪心假设最优搭配为两类单品最优组合,代码极简、线性效率;关键:后项目启动时间 =max(自身起始时间,前项目结束时间)。
2026-06-04 08:32:16
243
原创 LeetCode 每日一题笔记 日期:2026.06.02 题目:3633. 最早完成陆地和水上游乐设施的时间 I
贪心关键点:全局最优一定是单品最优互相组合,不用全量枚举所有配对;只分先后两种游玩次序,分别计算最优再对比即可;优化把平方复杂度降为线性,大数据下效率提升明显。
2026-06-04 08:31:43
230
原创 LeetCode 每日一题笔记 日期:2026.06.01 题目:2144. 打折购买糖果的最小开销
贪心策略,通过让高价糖果被免费赠送来最小化开销。两种解法均基于“每三个一组,前两个付费”的思想,排序法实现更简洁,优先队列法更直观。关键:从高到低处理糖果,确保免费赠送的是尽可能贵的糖果。
2026-06-01 09:04:06
207
原创 LeetCode 每日一题笔记 日期:2026.05.31 题目:2126. 摧毁小行星
贪心思想,优先处理质量小的目标,是解决此类“增长型”问题的通用策略;排序解法直观易写,面试优先使用;二进制分组解法在大数据下效率更高,可作为进阶优化;关键细节:行星质量累加可能超过int范围,需用long类型存储,避免溢出错误。
2026-05-31 22:26:30
273
原创 LeetCode 补拙笔记 日期:2026.05.29 题目:1559. 二维网格图中探测环
并查集检测环,通过合并相同字符的相邻节点,利用连通性判断环的存在。优化后代码在遍历顺序和并查集初始化上做了简化,逻辑更紧凑。关键技巧:只检查右侧和下侧邻居,避免重复合并;路径压缩优化查找效率。
2026-05-29 13:51:44
283
原创 LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
数学取模求各位和,比字符串方式更高效。优化点:去掉字符串转换操作,纯数值运算提升性能。num % 10取最后一位,num /= 10去掉最后一位。
2026-05-29 12:56:10
181
原创 LeetCode 每日一题笔记 日期:2026.05.28 题目:3093. 最长公共后缀查询
后缀转前缀 + 字典树,通过逆序字符串将后缀匹配问题转化为前缀匹配问题。优化关键:在字典树节点中提前维护“最优”下标,避免查询时二次比较,直接返回结果。技巧:根节点存储全局最优,处理无公共后缀的边界情况,简化查询逻辑。
2026-05-28 17:39:11
231
原创 LeetCode 补拙笔记 日期:2026.05.27 题目:61. 旋转链表
统计长度 + 断尾接原头,是旋转链表最直接高效的实现方式;优化后代码减少了冗余变量和分支判断,逻辑更清晰,可读性更高;关键技巧:利用链表的尾节点直接接原头节点,避免了额外的空间开销,实现原地旋转。
2026-05-27 09:21:27
85
原创 LeetCode 每日一题笔记 日期:2026.05.27 题目:3121. 统计特殊字母的数量 II
记录字符首次/末次位置,判断位置关系。优化思路:用位置判断替代复杂的状态标记,逻辑更清晰。关键:小写全部在大写前面 →last[小写] < first[大写]。
2026-05-27 08:45:35
78
原创 LeetCode 补拙笔记 日期:2026.05.26 题目:48. 旋转图像
转置 + 水平翻转,将旋转问题拆解为两个简单的原地操作;优化后代码逻辑更紧凑,减少了冗余变量和分支,可读性更高;关键技巧:顺时针旋转90°的原地操作是矩阵类题目的经典模板,转置+水平翻转的组合是最简洁高效的实现方式。
2026-05-26 19:04:54
87
原创 LeetCode 每日一题笔记 日期:2026.05.26 题目:3120. 特殊字母的数量
单个数组统计大小写出现次数。优化点:减少判断、减少二维数组,逻辑更清晰。关键:小写占前26位,大写占后26位,一一对应检查即可。
2026-05-26 15:02:46
74
原创 LeetCode 补拙笔记 日期:2026.05.25 题目:796. 旋转字符串
利用字符串拼接 + 子串匹配,将旋转问题转化为子串问题。优化后的KMP实现,避免了内置方法的不确定性,保证了线性时间复杂度,是面试中更推荐的写法。s+s包含了s的所有旋转状态,这是解决这类问题的经典套路。
2026-05-25 22:26:27
250
原创 LeetCode 每日一题笔记 日期:2026.05.25 题目:1871. 跳跃游戏 VII
差分数组 + 前缀和优化跳跃区间的可达性更新。优势:避免On2O(n^2)On2暴力遍历,效率大幅提升。本质:用区间标记代替逐个标记,是跳跃游戏的经典优化思路。
2026-05-25 22:25:27
330
原创 LeetCode 每日一题笔记 日期:2026.05.24 题目:1340. 跳跃游戏 V
本题核心是利用记忆化搜索解决树形依赖问题,基础版实现简单但易超时,优化版通过单调栈预处理大幅降低时间复杂度。解题关键在于理解“路径中无更高元素”的规则,通过预处理找到能跳的终点,避免不必要的遍历。对于大规模用例,优先使用优化版;基础版适合快速实现和理解问题。
2026-05-24 21:53:44
826
原创 LeetCode 每日一题笔记 日期:2026.05.23 题目:1752. 检查数组是否经排序和轮转得到
统计下降次数,利用有序数组轮转的特性,下降次数不超过1次即为合法;优化后代码通过提前终止减少不必要的遍历,同时保持逻辑简洁;本题关键是理解有序数组轮转后的局部有序性,以及下降次数的判定条件。
2026-05-24 21:52:48
93
原创 LeetCode 每日一题笔记 日期:2026.05.22 题目:33. 搜索旋转排序数组
局部有序的二分查找,利用旋转数组的特性,每次只在有序区间内判断目标值位置;关键技巧:通过nums[mid]与nums[left]的大小关系,快速判断哪一侧区间有序;优化后代码通过三目运算符简化分支,逻辑更紧凑,同时保持原算法的正确性与时间复杂度。
2026-05-24 21:51:45
252
原创 LeetCode 每日一题笔记 日期:2026.05.21 题目:3043. 最长公共前缀的长度
前缀存储 + 匹配查询,哈希表法实现简单,字典树法在大数据下效率更高;优化后代码统一了单数字前缀的处理逻辑,减少了冗余分支,可读性更强;关键技巧:通过num /= 10循环剥离数字前缀,避免字符串转换的额外开销。
2026-05-24 21:49:01
276
原创 LeetCode 每日一题笔记 日期:2026.05.20 题目:2657. 找到前缀公共数组
计数统计 + 一次遍历。关键:元素出现两次即为公共元素,直接计数即可。优化版用数组替代哈希表,速度更快、代码更短。
2026-05-20 21:32:00
114
原创 LeetCode 每日一题笔记 日期:2026.05.16 题目:154. 寻找旋转排序数组中的最小值 II
带重复元素的二分查找,利用right--处理的情况;关键区别:与无重复元素版本相比,增加了相等时的线性收缩步骤;优化后代码逻辑更紧凑,去掉了不必要的方法调用,可读性和效率更高。
2026-05-19 20:12:03
228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅