【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
1

首先明确一个计算容积的方向——按照列来计算每个位置的容积,然后我们将每列的容积相加就得到整体的容积。将”示例1″中的容器按列划分,得到如上的图。
如何计算每个位置的容积呢?通过观察我们可以得出公式: 位置i接水的容积 = Math.min([0,i)的最高位置, (i,length-1]的最高位置) - 位置i的高度。如下图所示:

示例1的接水容积计算过程如下图所示:

所以,我们可以维护两个数组:

  • 第一个数组 left[i]中存储的是 [0,i]的最大值
  • 第二个数组 right[i]中存储的是 [i,length -1]的最大值

然后再遍历一遍数组,使用公式: 位置i接水的容积 = Math.min(left[i-1], right[i+1]) - 位置i的高度就能得到位置i的接水容积,最后将每个位置的接水容积相加就能得到总的容积。

代码如下:


class Solution {
    public int trap(int[] height) {
        // left[i]记录的是0~i位置上的最大值
        int[] left = new int[height.length];
        // right[i]记录的是i~0位置上的最大值
        int[] right = new int[height.length];

        // 1.初始化left[]
        int leftMax = 0;
        for (int i = 0; i < height.length; i++) {
            leftMax = Math.max(leftMax, height[i]);
            left[i] = leftMax;
        }

        // 2.初始化right[]
        int rightMax = 0;
        for (int i = height.length - 1; i >= 0; i--) {
            rightMax = Math.max(rightMax, height[i]);
            right[i] = rightMax;
        }

        // 3.计算容积
        int result = 0;
        for (int i = 1; i < height.length - 1; i++) {
            int v = Math.min(left[i - 1], right[i + 1]) - height[i];

            if (v > 0) {
                result += v;
            }
        }

        return result;
    }
}

Original: https://www.cnblogs.com/daheww/p/16297926.html
Author: daheww
Title: 【leetcode】42. 接雨水

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713202/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux系统安装JDK

    准备工作 1.去JDK的官网下载一个1.8的安装包 2.解压到linux系统 tar -zxvf jdk-8u311-linux-x64.tar.gz -C /download/c…

    技术杂谈 2023年7月11日
    075
  • javaweb获取客户端真实ip

    &#xA0; &#xA0; &#xA0; public static String&#xA0;getClientIP(HttpServletRequ…

    技术杂谈 2023年6月21日
    084
  • HTML

    HTML5 一、标签 提示信息 placehod 锚链接: 顶部 回到顶部 空格:& nbsp; 序列 有序列表: java java 无序列表: java 自定义列表 d…

    技术杂谈 2023年6月21日
    084
  • Django 如何获取 Model 字段列表?

    在平时的开发过程中,避免不了需要获取 Model 中的字段列表。 那需要把所有字段都再复制一份吗?这样的话就太麻烦了,而且后期也不好维护。 其实,Django 内置了一个方法,可以…

    技术杂谈 2023年6月21日
    0108
  • Python 中删除列表元素的三种方法

    列表基本上是 Python 中最常用的数据结构之一了,并且删除操作也是经常使用的。 那到底有哪些方法可以删除列表中的元素呢?这篇文章就来总结一下。 一共有三种方法,分别是 remo…

    技术杂谈 2023年6月21日
    093
  • 默认端口

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    0102
  • Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop

    最近由于要使用Sqoop来到出数据到hdfs,可是发现Sqoop1.4.5跟hadoop2.X不兼容,需要对Sqoop1.4.5进行编译,编译的具体方法见:http://my.co…

    技术杂谈 2023年5月31日
    090
  • Kafka 概述

    kafka 是一个为事件流而生的分布式消息系统,广泛应用于网页用户记录跟踪,IOT 设备,日志采集,系统监控等场景。 kafka 是用于构建实时数据管道和流应用程序。具有横向扩展,…

    技术杂谈 2023年7月24日
    061
  • fb-watchman 文件查看服务

    fb-watchman https://facebook.github.io/watchman/docs/nodejs.html Original: https://www.cnb…

    技术杂谈 2023年5月31日
    087
  • MySQL数据库-数据表(三)

    SELECT定义: SQL的SELECT语句可以实现对表的选择、投影及连接操作。即SELECT语句可以从一个或多个表中根据用户的需要从数据库中选出匹配的行和列,结果通常是生成一个临…

    技术杂谈 2023年6月21日
    0121
  • DataGridView数据内容自适应列宽

    数据自适应宽度某一列dataGridView1.Columns[@”列名”].AutoSizeMode = DataGridViewAutoSizeColu…

    技术杂谈 2023年7月10日
    086
  • sliderView海报滑动轮播

    sliderView为容器型元素,与container非常类似,其包含私有styleBinding元素如下: 属性 值 说明 isPointHide false 是否隐藏轮播的圆点…

    技术杂谈 2023年6月1日
    089
  • 初识Python系列(一)

    对于Python selenium操作的总结(一) 1.对于驱动的安装 驱动包:webdriver(在cmd执行help(webdriver)可查看所支持的浏览器类型,在此只提其中…

    技术杂谈 2023年7月23日
    066
  • Mall商城的高级篇的开发(一)全文检索和Nginx的反向代理

    Mall商城的高级篇的开发 项目的整体架构图 实现全文检索和日志分析 在本项目中,全文检索使用 ElasticSearch来做全文检索。 做日志存储和日志检索(日志的快速定位)使用…

    技术杂谈 2023年7月10日
    098
  • Postman 正确使用姿势

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的…

    技术杂谈 2023年7月11日
    059
  • Serviio Pro for mac/win(家庭媒体共享服务器)中文

    Original: https://www.cnblogs.com/aurora-123/p/16885596.htmlAuthor: 佛系女孩Title: Serviio Pro…

    技术杂谈 2023年7月11日
    059
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球