leetcode-go
星沁城
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
56. 合并区间
该文章介绍了合并区间的算法思路:先将区间按起始位置排序,然后遍历比较相邻区间。若当前区间结束位置小于下一个区间起始位置,则无重叠直接加入结果;否则合并两区间,取较大的结束位置。代码实现了这一逻辑,使用自定义排序对区间列表进行排序,然后通过遍历比较和更新区间边界来完成合并操作。原创 2025-08-13 15:07:37 · 377 阅读 · 0 评论 -
53. 最大子数组和
本文介绍了求最大子数组和的贪心算法解法。通过维护当前子数组和currSum和全局最大值maxSum,当currSum为负时舍弃重新开始,否则继续累加。时间复杂度O(n),空间复杂度O(1)。代码实现简洁高效,适用于处理任意长度的整数数组。原创 2025-08-13 15:04:14 · 145 阅读 · 0 评论 -
239. 滑动窗口最大值
该代码实现了一个滑动窗口最大值算法,使用单调递减的双端栈来高效求解。主要思路是:1)初始化时构建前k个元素的单调栈;2)滑动窗口时,先移除过期元素,再维护栈的单调性,最后将当前元素入栈。通过栈底元素获取当前窗口最大值。时间复杂度O(n),空间复杂度O(k),相比暴力解法更高效。关键点在于维护单调栈结构,确保栈底始终是当前窗口最大值。原创 2025-07-30 15:31:40 · 383 阅读 · 0 评论 -
560. 和为 K 的子数组
该文讨论了解决LeetCode上"和为K的子数组"问题的两种方法。第一种是暴力解法,使用前缀和数组计算所有可能的子数组和,时间复杂度为O(n²)。第二种优化方法利用哈希表存储前缀和出现次数,通过查找preSum[i]-k是否存在来统计符合条件的子数组数量,时间复杂度降为O(n)。两种方法都避免了滑动窗口算法在处理负数时失效的问题,但后者通过空间换时间显著提升了效率。原创 2025-07-30 15:29:06 · 343 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
本文介绍了一种使用滑动窗口算法在字符串中查找所有异位词的方法。通过维护左右指针和两个计数数组(分别记录当前窗口字符和目标字符串字符出现次数),逐步滑动窗口并比较计数数组是否匹配。当匹配成功时记录起始位置,最终返回所有符合条件的起始索引。该方法时间复杂度为O(n),空间复杂度为O(1)(仅使用固定大小的计数数组)原创 2025-07-28 11:22:56 · 180 阅读 · 0 评论 -
3. 无重复字符的最长子串
本文介绍了一种使用滑动窗口算法求解无重复字符的最长子串长度的方法。通过维护左右指针和哈希表记录字符位置,当遇到重复字符时移动左指针并更新哈希表,同时不断更新最大子串长度。该算法时间复杂度为O(n),空间复杂度为O(字符集大小)原创 2025-07-28 11:21:01 · 242 阅读 · 0 评论 -
42. 接雨水
这道题使用双指针法解决接雨水问题,时间复杂度O(n),空间复杂度O(1)。定义左右指针分别从数组两端向中间移动,同时维护左右两侧的最大高度。当左指针高度小于右指针时,移动左指针并计算当前位置能接的雨水量(当前左最大高度减去当前高度);否则移动右指针并类似计算。该方法通过单次遍历即可求出总接水量,是一种高效的空间优化算法。原创 2025-07-28 11:19:14 · 253 阅读 · 0 评论 -
15. 三数之和
该代码实现了一个求解三数之和为0的算法。首先对数组进行排序,然后使用三重循环(外层固定一个数,内层双指针)寻找满足条件的三个数。关键点包括:1) 排序后跳过重复元素避免重复解;2) 使用双指针技巧将时间复杂度从O(n³)优化到O(n²);3) 当和为0时同时移动左右指针并跳过重复值。该解法是解决三数之和问题的经典方法,正确处理了去重和效率问题。原创 2025-07-27 17:46:53 · 140 阅读 · 0 评论 -
11. 盛最多水的容器
该算法使用双指针法求解容器盛水最大面积问题。初始时,左右指针分别指向数组首尾。每次计算当前指针位置形成的容器面积,并更新最大面积。通过比较两边高度,移动较小高度的指针(因为移动较大高度的指针不会获得更大面积)。时间复杂度O(n),空间复杂度O(1)。该方法高效地找到最大盛水面积,适用于任意高度的垂线排列。原创 2025-07-27 17:45:49 · 209 阅读 · 0 评论 -
283. 移动零
该算法实现将数组中的零元素移动到末尾。使用双指针法:index_0指向第一个零的位置,index_not_0指向第一个非零的位置。当找到非零元素且在零元素之后时,交换两者值,并更新index_0指向下一个零。时间复杂度O(n),空间复杂度O(1),通过原地交换实现零元素后移,保持非零元素相对顺序不变。原创 2025-07-27 17:44:19 · 200 阅读 · 0 评论 -
128. 最长连续序列
该文章讨论了两种寻找最长连续序列的算法实现。第一种使用哈希表记录数字状态,遍历时扩展连续序列并标记已访问元素,时间复杂度较高可能超时。第二种优化方法利用集合存储数字,仅从序列起点开始扩展,避免重复计算。当遇到一个数字的前驱不存在时,将其作为序列起点向后扩展,统计连续序列长度。两种方法都处理了空数组情况,返回0。第二种优化方法通过避免不必要的遍历,提高了算法效率。原创 2025-07-27 15:22:21 · 186 阅读 · 0 评论 -
49. 字母异位词分组
题目要求将字母异位词分组。给出两种Go语言解法: 排序法:将字符串排序后作为哈希表的键,时间复杂度O(nklogk),其中k是字符串最大长度。 计数法:统计每个字符串中字母出现次数,将计数数组作为哈希表键,时间复杂度O(nk),空间效率更高。 两种方法都能正确分组异位词,最终返回分组后的字符串切片。计数法通过字母统计直接生成键值,避免了排序操作,在性能上更优。原创 2025-07-27 15:19:28 · 147 阅读 · 0 评论 -
120. 三角形最小路径和
这篇文章介绍了一种使用动态规划解决三角形最小路径和问题的算法。算法采用自底向上的方法,首先初始化一个与三角形结构相同的二维数组dp,并将最后一行直接赋值为三角形的对应值。然后从倒数第二行开始向上遍历,每个位置的最小路径和等于当前值加上下一行相邻两个位置的最小值。最终返回三角形顶点的最小路径和。该算法的时间复杂度为O(n²),空间复杂度为O(n²),其中n是三角形的行数。原创 2025-07-27 15:17:29 · 104 阅读 · 0 评论 -
300. 最长递增子序列
本文介绍了两种求解最长递增子序列(LIS)的算法。第一种是O(n²)的动态规划解法,通过维护dp数组记录以每个元素结尾的最长递增子序列长度。第二种是更优的O(nlogn)解法,结合贪心算法和二分查找:维护一个临时数组dp,遍历时若当前数大于dp末尾则直接添加,否则用二分查找替换第一个大于当前数的元素。这种方法通过替换策略保证序列尽可能长而不影响最终结果。两种方法都能正确计算最长递增子序列长度,后者在效率上更优。原创 2025-07-27 15:16:23 · 115 阅读 · 0 评论
分享