力扣P42 接雨水
本文介绍力扣经典题目“接雨水”的解法。通过双指针技巧,从数组两端向中间遍历,维护左右两侧的最大高度(lmax 和 rmax)。每次移动较小一侧的指针,该位置能接的雨水量为当前侧最大值减去其高度,并累加结果。核心思想是:每个位置能接的雨水由左右两边最大高度中的较小者决定。算法时间复杂度为 O(n),空间复杂度为 O(1),高效且易于实现。
本文介绍力扣经典题目“接雨水”的解法。通过双指针技巧,从数组两端向中间遍历,维护左右两侧的最大高度(lmax 和 rmax)。每次移动较小一侧的指针,该位置能接的雨水量为当前侧最大值减去其高度,并累加结果。核心思想是:每个位置能接的雨水由左右两边最大高度中的较小者决定。算法时间复杂度为 O(n),空间复杂度为 O(1),高效且易于实现。
本文讨论力扣第32题“最长有效括号”,要求找出给定括号字符串中最长有效括号子串的长度。作者首先尝试使用动态规划(DP)方法,定义 `dp[i]` 表示以第 `i` 个字符结尾的最长有效括号长度。状态转移分两种情况:当 `s[i] == ')'` 时,若前一字符为 `'('`,则形成 `"()"` 结构;否则检查是否能与更左侧的 `'('` 匹配,并结合已有的有效长度进行更新。优化后的 DP 解法时间复杂度为 O(n),空间复杂度为 O(n)。此外,作者指出该题也可用栈来解决,遍历字符串时利用栈存储下标,通过匹配括号更新最大长度,同样可达到 O(n) 时间效率。整体核心在于合理设计状态转移或利用栈维护未匹配位置。