LeetCode 42. 接雨水

2023-09-20 18:52:27

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

        先算出每个位置的面积,然后把每个位置的面积相加就得到了最终可以接多少雨水!

        每个位置的面积等于(该位置左边包括自己最大的高度)与(该位置右边包括自己最大的高度)中最小的那个数,然后减去当前位置的高度,就是当前位置可以存放的雨水。

        首先定义两个数组left_Max,right_Max来去计算每个位置的雨水可以到达的最大高度,然后遍历height用每个位置雨水达到的最大高度减去当前位置的高度,相加之后返回结果即可。

        细节:需要初始化 left_Max[0]=height[0]      如果左边没有元素的情况下直接取自己即可

               需要初始化 right_Max[n-1]=height[n-1] 如果右边没有元素的情况下直接取自己即可

代码

class Solution 
{
    // 动态规划
    // 每个位置的面积等于(该位置左边包括自己最大的高度)与(该位置右边包括自己最大的高度)中最小的那个数
    // 减去当前位置的高度,就是当前位置可以存放的雨水
    // 首先定义两个数组left_Max,right_Max来去计算每个位置的雨水可以到达的最大高度
    // 然后遍历height用每个位置雨水达到的最大高度减去当前位置的高度
    // 相加之后返回结果即可

    // 细节:
    // 需要初始化 left_Max[0]=height[0]      如果左边没有元素的情况下直接取自己即可 
    // 需要初始化 right_Max[n-1]=height[n-1] 如果右边没有元素的情况下直接取自己即可 
public:
    int trap(vector<int>& height) 
    {
        int n=height.size();
        // 创建数组
        vector<int> left_Max(n),right_Max(n);
        left_Max[0]=height[0];
        right_Max[n-1]=height[n-1];
        // 给两个数组赋值
        for(int i=1;i<n;i++) left_Max[i]=max(left_Max[i-1],height[i]);
        for(int i=n-2;i>=0;i--) right_Max[i]=max(right_Max[i+1],height[i]);

        // 遍历求和
        int sum=0;
        for(int i=0;i<n;i++)
        {
            sum+=min(left_Max[i],right_Max[i])-height[i];
        }
        return sum;
    }
};

更多推荐

springboot实现webSocket服务端和客户端demo

1:pom导入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>2.2.7.RELEASE</version></dependen

网站降权的康复办法(详解百度SEO数据分析)

随着搜索引擎算法的不断升级,很多网站在SEO优化过程中遭遇到降权的情况。如果您的网站也遭遇到了类似的问题,不必惊慌失措。本文将为您详细介绍网站降权恢复的方法,包括百度SEO数据分析、网站收录少的5个原因、网站被降权的6个因素以及百度SEO提升排名的4个方法。蘑菇号www.mooogu.cn首先,要想恢复网站降权,我们需

Rust踩雷笔记(7)——两个链表题例子初识裸指针

目录leetcode234leetcode19leetcode234题目在这https://leetcode.cn/problems/palindrome-linked-list/,leetcode234的回文链表,思路很简单,就是fast和slow两个指针,fast一次移动两个、slow一次一个,最后slow指向的链

【Linux系统编程】通过系统调用获取进程标识符 及 创建子进程(fork)

文章目录1.通过系统调用获取进程标示符(PID)1.1进程id(PID)1.2父进程id(PPID)2.bash也是一个进程3.通过系统调用创建进程-fork初识3.1批量化注释3.2取消注释3.3fork创建子进程3.4fork的返回值3.5fork之后通常要用if进行分流3.6父子进程代码共享,数据写时拷贝(实现相

手机号码携号转网API接口,轻松实现用户号码流转

携号转网是指用户可以将自己的手机号码从原来的运营商转移到其他运营商,以更好的服务、更低的资费和更多的优惠来吸引用户。而手机号码携号转网API接口,则是让开发者可以方便地实现用户号码流转的工具,下面就来介绍一下如何使用手机号码携号转网API接口。一、API接口简介手机号码携号转网API接口是指一个提供手机号码携号转网服务

GitHub 曝出漏洞,或导致 4000 多个存储库遭受劫持攻击

TheHackerNews网站披露,安全研究员发现GitHub中存在一个新安全漏洞,该漏洞可能导致数千个存储库面临劫持攻击的风险。据悉,在2023年3月1日漏洞披露后,微软旗下的代码托管平台已于2023年9月1日解决了安全漏洞问题。Checkmarx安全研究员EladRapoport在与TheHackerNews分享的

mysql向数据库中添加数据

要向MySQL数据库中添加数据,您可以使用INSERTINTO语句。以下是一些基本步骤和示例代码来添加数据:连接到数据库:首先,您需要使用MySQL客户端或编程语言中的MySQL连接库连接到您的数据库。编写INSERT语句:创建一个INSERTINTO语句,指定要插入数据的表名和要插入的数据列以及其值。语法如下:INS

【学习笔记】Java 一对一培训(2.1)Java基础语法

【学习笔记】Java一对一培训(2.1)Java基础语法关键词:Java、SpringBoot、Idea、数据库、一对一、培训、教学本文主要内容含Java简介、Java基础语法、Java对象和类、Java基本数据类型、Java变量类型、Java修饰符计划2小时完成,请同学尽量提前准备。这部分主要讲述Java是什么、怎么

Spring Boot的运行原理

SpringBoot的运行原理SpringBoot是一个用于快速构建独立、可独立运行的Spring应用程序的框架。它通过自动配置和约定优于配置的原则,简化了Spring应用程序的开发过程。下面将详细介绍SpringBoot的运行原理,并附上一些代码解释。1.主要组件SpringBoot的核心组件包括自动配置(Auto-

基于SpringBoot的图书商城系统

基于SpringBoot+Vue的网上书城系统、图书商城、网上书店系统,前后端分离开发语言:Java数据库:MySQL技术:SpringBoot、Vue、MybaitsPlus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven【主要功能】角色:管理员、用户管理员:用户管理、图书类型管理、图书

TCP详解之流量控制

TCP详解之流量控制发送方不能无脑的发数据给接收方,要考虑接收方处理能力。如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。为了解决这种现象发生,TCP提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制。下面举个栗子,为了简

热文推荐