zoukankan      html  css  js  c++  java
  • LeetCode 42. 接雨水

    题目描述

    给定 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
    

    提示:

    • n == height.length
    • 0 <= n <= 3 * 104
    • 0 <= height[i] <= 105

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/trapping-rain-water

    思路解析

    数轴上某一个点能接多少水,取决于其左右两侧的最高墙高的较小值。
    使用双指针法,左指针指向数组头,右指针指向数组尾,不断更新左侧最高墙高与右侧最高墙高,并计算该点的能接到的雨水值。

    代码实现

    class Solution {
    public:
        int trap(vector<int>& height) {
            int left = 0, right = height.size() - 1;
            int maxLeft = 0, maxRight = 0;
            int res = 0;
            while(left < right) {
                if(height[left] < height[right]) {
                    if(height[left] > maxLeft)
                        maxLeft = height[left];
                    else 
                        res += maxLeft - height[left];
                    left++;
                }
                else {
                    if(height[right] > maxRight)
                        maxRight = height[right];
                    else
                        res += maxRight - height[right];
                    right--;
                }
            } 
            return res;
        }
    };
    
  • 相关阅读:
    [转载]四大Java EE容器
    [转载]javaEE规范和SSH三大框架到底有什么关系
    javaee包含的服务和组件
    Java类文件最大限制
    oracle给字段添加描述
    apache commons工具包
    redis教程
    git学习
    编程人物
    程序员必须了解的5大编程准则
  • 原文地址:https://www.cnblogs.com/xqmeng/p/14043313.html
Copyright © 2011-2022 走看看