随笔分类 - LeetCode
摘要:560. 和为 K 的子数组 思路 前缀和:我们维护一个当前的累计和 prefixSum,表示从数组起始位置到当前位置前的所有元素之和。 哈希表:我们使用一个哈希表 prefixSumCount 来记录每种前缀和出现的次数。 如果存在某个前缀和 prefixSum - k,说明从那个位置到当前位置的
阅读全文
摘要:438. 找到字符串中所有字母异位词 思路 滑动窗口 + 数组(字符计数) 使用两个固定长度的数组(长度为 26,代表英文字母 a-z)分别记录: p 中各字符的频率; 当前窗口中各字符的频率; 遍历 s,滑动长度为 len(p) 的窗口,比较窗口内字符频率是否与 p 的一致; 如果一致,记录窗口
阅读全文
摘要:283. 移动零 思路 使用一个指针 i 来记录当前非零元素应该放置的位置。 遍历数组,如果当前元素不为零,则将其放到 i 的位置,并将 i 向后移动一位。 遍历结束后,从 i 开始到数组末尾的所有位置都设置为 0。 复杂度分析 时间复杂度:O(n),其中n是数组长度。进行了两次独立遍历 空间复杂度
阅读全文
摘要:239. 滑动窗口最大值 思路 双端队列的使用:我们使用双端队列来存储可能成为窗口最大值的元素索引。队列中的元素按从大到小排序。 维护队列: 移除不在当前窗口范围内的元素(从队列头部移除) 移除所有小于当前元素的队列元素(从队列尾部移除),因为它们不可能是当前或未来窗口的最大值 将当前元素添加到队列
阅读全文
摘要:128. 最长连续序列 思路 将所有元素放入一个 HashSet 中,用于快速查找是否存在某个数字。 遍历每个数字时,判断它是否是一个序列的起点: 如果 num - 1 不存在于集合中,则说明 num 是一个潜在序列的起点。 从该起点开始向后扩展,统计当前连续序列的长度。 维护最大长度即可。 复杂度
阅读全文
摘要:76. 最小覆盖子串 思路 先统计t的字符个数 窗口遍历 left,right指针形成窗口,right从0索引开始滑动 统计窗口内t中包含的字符数量 当窗口内的字符数量和t中的一样时,则得到了其中一个子串 收缩窗口,寻找最小字串 先保存当前字串的位置 每缩小一个字符,就判断t中是否包含,如果包含,并
阅读全文
摘要:56. 合并区间 思路 排序:首先按照每个区间的起始位置 start 升序排列。这样可以保证我们按顺序处理区间,便于判断是否重叠。 遍历合并: 维护一个结果列表 result。 将第一个区间加入结果列表。 对于后续每一个区间: 如果当前区间的 start 大于结果列表中最后一个区间的 end,说明不
阅读全文
摘要:53. 最大子数组和 思路 定义一个变量 currentSum 表示以当前元素结尾的最大子数组和。 遍历数组时,对于每个元素 nums[i],我们有两种选择: 将其加入前面的子数组(前提是前面的 currentSum > 0)。 从当前元素重新开始一个新的子数组(如果前面的 currentSum <
阅读全文
摘要:49. 字母异位词分组 思路 使用哈希表(HashMap) Key:每个字符串排序后的字符数组(如 "eat" → "aet") Value:具有相同 Key 的原字符串组成的 List 这样,只要两个字符串是字母异位词,它们排序后得到的 Key 就是一样的,就可以被归为一组。 复杂度分析 时间复杂
阅读全文
摘要:42. 接雨水 思路 要解决接雨水问题,核心思路是计算每个位置能接的雨水量,即该位置左右两侧最高柱子的较小值减去当前柱子的高度。使用双指针法可以在 O(n) 时间内完成,空间复杂度 O(1)。 初始化指针和变量: left 指针在数组起始位置 right 指针在数组末尾 left_max 记录
阅读全文
摘要:15. 三数之和 思路 要找出所有和为0且不重复的三元组,可以使用排序+双指针的策略: 排序数组:预处理数组,便于跳过重复元素和使用双指针 固定一个元素:遍历数组,固定当前元素 nums[i] 双指针寻找匹配元素: 左指针 left = i + 1 右指针 right = nums.length
阅读全文
摘要:11. 盛最多水的容器 思路 要解决容器盛水问题,核心是最大化底边长度与最小高度的乘积。使用双指针策略: 双指针初始化:左指针在数组起始位置,右指针在数组末尾 指针移动规则:每次移动高度较小的指针(因为容器高度由较小值决定) 面积计算:当前面积 = 指针距离 × 较小高度 更新最大面积:遍历过程中记
阅读全文
摘要:3. 无重复字符的最长子串 思路 滑动窗口:使用两个指针 left 和 right 表示当前子串的左右边界。right 指针向右扩展窗口,left 指针在遇到重复字符时收缩窗口。 哈希表记录字符最后出现位置:用一个字典 charIndexMap 存储每个字符最后出现的索引。当 right 指针遇到重
阅读全文
摘要:1. 两数之和 1. 两数之和 要求时间复杂度小于O(n2),可以使用哈希表实现。 思路 我们在遍历数组时,每访问一个元素 nums[i],就查看之前是否已经存在一个数 target - nums[i]。 如果存在,说明找到了两个数,它们的和为 target,直接返回这两个下标。 使用 HashMa
阅读全文

浙公网安备 33010602011771号