LeetCode 42. Trapping Rain Water 题解
LeetCode 42. Trapping Rain Water 题解题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图计算按此排列的柱子下雨之后能接多少雨水。示例 1输入height [0,1,0,2,1,0,1,3,2,1,2,1] 输出6 解释上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图在这种情况下可以接 6 个单位的雨水蓝色部分表示雨水。示例 2输入height [4,2,0,3,2,5] 输出9解题思路方法一双指针每个位置能接的雨水 min(左边最高, 右边最高) - 当前高度使用双指针从两端向中间移动方法二单调栈使用单调递减栈当遇到更高的柱子时计算可以接的雨水代码实现方法一双指针def trap(height): if not height: return 0 left, right 0, len(height) - 1 left_max, right_max 0, 0 water 0 while left right: if height[left] height[right]: if height[left] left_max: left_max height[left] else: water left_max - height[left] left 1 else: if height[right] right_max: right_max height[right] else: water right_max - height[right] right - 1 return water方法二单调栈def trap(height): water 0 stack [] # 单调递减栈 for i, h in enumerate(height): while stack and height[stack[-1]] h: top stack.pop() if not stack: break # 计算雨水 distance i - stack[-1] - 1 bounded_height min(height[stack[-1]], h) - height[top] water distance * bounded_height stack.append(i) return water复杂度分析方法时间复杂度空间复杂度双指针O(n)O(1)单调栈O(n)O(n)总结本题是接雨水问题的经典解法。关键点双指针从两端向中间维护左右最大高度单调栈计算凹槽中的雨水量双指针空间更优
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2458405.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!