- 博客(18)
- 收藏
- 关注
原创 从暴力到优雅实现——力扣557.反转字符串中的单词 III
本文介绍了三种Java方法反转字符串中的每个单词:1)使用split和reverse方法,简单直接但空间复杂度较高;2)双指针原地反转,性能最优且空间复杂度为O(1);3)栈辅助方法,思路清晰适合初学者。推荐使用双指针方法,通过遍历字符数组,在单词范围内交换字符实现原地反转。三种方法时间复杂度均为O(n),但双指针方法空间效率最高,是面试中最优解。
2025-09-21 12:15:00
317
原创 一维数组原地更新——力扣119.杨辉三角形II
本文介绍了三种Java方法求解杨辉三角指定行,满足不同的时间/空间复杂度要求。方法一(O(k²)空间)直接构建整个三角;方法二(O(k)空间)通过一维数组从后往前原地更新;方法三(O(1)空间)利用组合数公式实现最优解。推荐面试使用方法二,既满足进阶要求又易于理解,代码清晰。三种方法对比显示,方法二在时间/空间复杂度间取得平衡,是面试的理想选择。
2025-09-20 13:00:00
296
原创 Java全解法——力扣118.杨辉三角
本文总结了LeetCode 118题“杨辉三角”的多种Java解法,包括逐行构造、保留上一行、一维数组优化和组合数公式四种方法。文章分析了各解法的时间复杂度(均为O(n²))和空间优化策略,并给出了面试建议:优先选择直观的逐行构造法,组合数公式适合数学拓展。关键点包括更新顺序、数据类型选择和边界处理。扩展思考提出了流式生成和大数取余等优化方向。全文提供了完整的可运行代码,适合面试准备和算法学习参考。
2025-09-19 00:30:49
1122
原创 滑动窗口法的优化与实战——力扣209.长度最小的子数组
题目要求找到总和≥target的最短连续子数组。初始滑动窗口代码存在窗口收缩不彻底的问题,优化后改为持续收缩确保找到最小窗口,时间复杂度O(n)。另提供前缀和+二分查找的O(n log n)解法,适用于需要二分优化的场景。暴力法因O(n²)复杂度不推荐。最优解是优化后的滑动窗口法,简洁高效。
2025-09-18 23:56:41
557
原创 从暴力到最优解的全面解析——力扣485.最大连续1的个数
本文探讨了力扣485题"最大连续1的个数"的多种解法。最推荐单次遍历计数法,通过维护当前连续1的计数和最大值,简洁高效。双指针法体现了滑动窗口思想,动态规划法可优化为O(1)空间。字符串分割法虽直观但不推荐。文章比较了各方法的时间/空间复杂度,指出常见错误和调试技巧,并建议首选单次遍历法。该问题的核心思想(遇到0重置,遇到1累加)为更复杂的数组问题奠定了基础。
2025-09-17 23:32:24
866
原创 双指针法:O(n)时间常量空间——力扣167.两数之和II - 输入有序数组
摘要:力扣167题要求在一个有序数组中找到两数之和等于目标值,返回其1-based下标。推荐双指针法:初始化左右指针分别指向数组两端,通过比较当前和与目标值动态调整指针位置,时间复杂度O(n),空间复杂度O(1)。备选二分查找法对每个元素在其右侧二分查找补数,时间复杂度O(n log n)。双指针法更优,充分利用数组有序性,代码简洁高效。注意下标转换和指针移动逻辑即可避免常见错误。
2025-09-16 23:51:07
712
原创 四种 Java 解法(含递归和位运算技巧)——力扣.344 反转字符串
如果字符串中包含代理对(surrogate pair),例如一些 emoji 或非常用汉字,一个可见字符可能由两个。:一个指向数组头部,一个指向数组尾部,交换它们,然后向中间逼近直到相遇。如果你要做“对用户可见字符”的反转,需要按 code point 操作,例如先把字符串转成 code point 数组(int[]),再反转;用位运算的异或性质交换两个变量,而不使用显式的临时变量。请在原数组上原地修改,不能分配额外的数组,额外空间复杂度应为 O(1)。将输入的字符串反转。,分别指向数组两端,交换。
2025-09-15 22:55:22
667
原创 从“数珠子“到“量绳子“的位运算优化实战——牛客.识别有效的IP地址和掩码并进行分类统计
在编程中,我们常常会陷入"怎么实现"的思维,而忽略了"怎么思考"。就像把手工数珠子变成了用尺子量绳子,效率提升明显。原方法:像在数一串珠子,一个一个看优化后:像用尺子量一段绳子,一量就知道这种思维方式的转变,让我们的代码更高效、更简洁、更易维护。
2025-09-14 13:39:50
551
原创 高效去重与排序:布尔数组的巧妙应用——牛客.明明的随机数
本题的最优解法利用了数据范围有限去重:O(1) 标记操作排序:自然顺序遍历输出:高效拼接这种方法在时间和空间上均达到理论最优,是解决类似范围固定数据问题的推荐方案。对于本题(n ≤ 1000, 数字 ≤ 500),该方案的效率远超通用排序方法。
2025-09-13 21:32:27
897
原创 边界控制的艺术:力扣 54. 螺旋矩阵(顺时针螺旋遍历)
本文介绍了力扣第54题“螺旋矩阵”的解题方法,通过模拟顺时针螺旋遍历顺序返回矩阵元素。核心思路是维护四个边界(上、下、左、右),依次按右、下、左、上四个方向遍历,每次遍历后缩小对应边界。代码实现中需注意边界条件和特殊情况处理,如单行/单列矩阵。算法时间复杂度为O(m×n),空间复杂度为O(1)。该方法逻辑清晰,能高效处理任意形状矩阵。
2025-09-13 00:12:31
446
原创 KMP算法实战——力扣28.找出字符串中第一个匹配项的下标
本文介绍了力扣28题,实现KMP算法在字符串中查找子串。问题要求在haystack中找出needle首次出现的下标,若不存在返回-1。KMP算法通过构建next数组记录模式串前缀信息,优化匹配过程,时间复杂度从暴力解法的O(m×n)降至O(m+n)。代码实现包括预处理next数组和KMP主循环,详细注释了匹配逻辑和边界处理。示例分析展示了算法流程,并总结了时间复杂度和注意事项。KMP的核心在于利用模式串信息减少重复比较,适用于高效字符串匹配场景。
2025-09-12 23:50:47
1012
原创 双指针or原地操作数组?——力扣151.反转字符串中的单词
本题的关键在于高效处理空格和灵活操作字符串结构。方法一适合快速实现,逻辑清晰。方法二展示了原地操作的技巧,适合追求空间优化的进阶挑战。根据实际需求选择合适的方法即可。
2025-09-11 23:48:46
874
原创 多法解——力扣5.最长回文子串
摘要:力扣第5题要求找出字符串中的最长回文子串。本文介绍了四种解法:1)暴力法(枚举所有子串并验证,时间复杂度O(n³));2)动态规划(利用二维数组存储状态,时间O(n²),空间O(n²));3)中心扩展法(从每个字符/间隙向两侧扩展,时间O(n²),空间优化至O(1));4)Manacher算法(通过预处理和对称性优化,时间O(n))。前三种方法适合理解基础逻辑,而Manacher算法效率最高但实现复杂。推荐中心扩展法作为平衡选择。
2025-09-10 23:46:26
1338
原创 横向扫描法优化——力扣14.最长公共前缀
通过优化横向扫描法,可以在保持代码简洁性的同时,显著提升性能,是解决本题的高效方案。:若第一个字符串很长,而其他字符串很短,则会进行大量无效比较。,逐步缩减公共前缀范围,最终找到最长公共前缀。如果不存在公共前缀,返回空字符串。给定一个由多个字符串组成的数组。
2025-09-10 22:54:06
705
原创 高效找到数组最左中间位置——力扣1991. 找到数组的中间位置
给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。中间位置 middleIndex 是满足 nums[0] + nums[1] + … + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + … + nums[nums.length-1] 的数组下标。如果 middleIndex == 0 ,左边部分的和定义为 0。
2025-09-08 15:11:26
631
原创 基于OceanBase的慢SQL优化点
SQL优化是提升数据库性能的关键环节,通过系统性分析和针对性优化,可以显著提高查询效率,减少系统负载。本文以Oceanbase为例,记录一下工作过程中整理的慢sql优化方向。
2025-06-26 16:42:35
939
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人