Swift刷算法:接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
LeetCode: https://leetcode.cn/problems/trapping-rain-water/submissions/

image.png
class Solution {
    func trap(_ height: [Int]) -> Int {
        guard height.count > 2 else { return 0 }
        
        // 左右做高点
        var maxL = height.first!
        var maxR = height.last!
        
        // 左右指针
        // 双指针从左右分别向中间移动,遇到高点更新高点,遇到低点更新水量
        var L = 0
        var R = height.count - 1
        
        // 结果
        var res = 0

        while L < R {
            if maxL <= maxR {
                // 左边高点比右边矮,则左边指针右移
                L += 1
                
                if height[L] >= maxL {
                    // 遇到左侧新高
                    maxL = height[L]
                } else {
                    // 遇到左侧低点,则形成洼地,储水增加
                    res += maxL - height[L]
                }
            } else {
                // 右边高点比左边矮,则右边指针左移
                R -= 1
                if height[R] >= maxR {
                    // 遇到右侧新高
                    maxR = height[R]
                } else {
                    // 遇到右侧低点,则形成洼地,储水增加
                    res += maxR - height[R]
                }
            } 
        }

        return res
    }
}
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上...
    huxinwen阅读 507评论 0 1
  • 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面...
    算法码上来阅读 1,288评论 0 0
  • 1.问题描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。高...
    不辍居阅读 728评论 0 1
  • 题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。如下图...
    SaltyFishDmer阅读 710评论 0 0
  • 前几天看到一个算法题就写了一下如下: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,...
    咯噔爸比阅读 303评论 0 0