首页 > 其他分享 >力扣---42. 接雨水

力扣---42. 接雨水

时间:2023-07-23 15:33:22浏览次数:33  
标签:rightHeight --- right int 42 height 力扣 leftHeight left

给定 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 <= n <= 2 * 104
  • 0 <= height[i] <= 105

 

双向指针,由于所有的柱子是从最底下往上升的,所以不用考虑底部镂空且被封闭的问题。

从左往最高处,不断记录当前的最高点,最高点到之后的路径中高度的差值即是可以装水的地方。

从右往最高处同理。

public class Leet42接雨水 {
    public int trap(int[] height) {
//        左边的答案
        int resLeft = 0;
//        右边的答案
        int resRight = 0;
//        左指针
        int left = 0;
//        右指针
        int right = height.length - 1;
//        左边的当前最高值
        int leftHeight = height[left];
//        右边的当前最高值
        int rightHeight = height[right];
        while (left < right) {
//            哪边小就移动哪边,保证最高点始终在两点中间。
            if (leftHeight < rightHeight) {
                left ++;
//                如果有差值,加到对应的答案中,如果当前的高于最高值,则更新最高值。右边的同理。
                if (height[left] < leftHeight) {
                    resLeft += leftHeight - height[left];
                } else {
                    leftHeight = height[left];
                }
            } else {
                right --;
                if (height[right] < rightHeight) {
                    resRight += rightHeight - height[right];
                } else {
                    rightHeight = height[right];
                }
            }
        }
        return resLeft + resRight;
    }
}

 

标签:rightHeight,---,right,int,42,height,力扣,leftHeight,left
From: https://www.cnblogs.com/allWu/p/17575068.html

相关文章

  • java spark-core wordcount
    实现JavaSpark-CoreWordCount流程概述下面是实现JavaSpark-CoreWordCount的整体流程:步骤描述1.创建SparkConf创建一个SparkConf对象,设置应用程序的名称和运行模式2.创建JavaSparkContext创建一个JavaSparkContext对象,用于连接Spark集群3.加载文本文件......
  • vue--dat41--scoped作用域
    1.scoped样式作用:让样式在局部生效防止冲突写法 <stylescoped>    </style> npmviewwebpackversions. 查看webpack的版本npmviewless-loaderversions查看less-loader版本npmiless-loader  安装less-loader......
  • 练习记录-AtCoder Beginner Contest 311-(A-E)
    写的还挺顺的F之后补A-FirstABC找abc三个字母什么时候出现了一次输出即可B-VacationTogether题意:最长的几个人一排里面均有时间#include<bits/stdc++.h>#defineclosestd::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)usingnamespacestd;typedeflon......
  • vue--day40--plugins插件
    1.main.js/***该文件是整个项目的入口文件*///引入VueimportVuefrom'vue'//引入App组件他是所有组件的父组件importAppfrom'./App.vue'//引入插件importpluginsfrom'./plugins'//关闭vue的生产提示Vue.config.productionTip=false//应用插件Vue.us......
  • 实操-登陆管理方面
    远程登陆到Linux服务器然后通过ifconfig指令查看虚拟机ip,能ping通才能远程登陆。Xshell只能对Linux公网进行命令性的操作,而文件的上传下载需要Xftp;(finalshell既可以命令操作也可以下文件)Vi和Vim编辑器【记事本】:wq   w代表right,q代表quit,写入并退出Vim快捷键......
  • linux 桌面todo软件-rainlendar2
    从官网下载时速度很慢,选择的是免费版本,下面有百度云的下载链接。  v2.19.2链接:https://pan.baidu.com/s/1AVENBcnIVHXbYq0zWM_0VQ提取码:dei7......
  • P3352 [ZJOI2016] 线段树 思考--zhengjun
    有一个显然的\(O(n^3q)\)的做法:设\(f_{i,l,r,x}\)表示\(i\)次操作过后,区间\([l,r]\)的数\(\lex\),\(a_{l-1},a_{r+1}>x\)的方案数。转移:$$f_{i,l,r,x}=f_{i-1,l,r,x}\timesg_{l,r}+\sum\limits_{j<l}f_{i-1,j,r,x}\times(j-1)+\sum\limits_{j>r}f_{i-1,l......
  • vue--day39--mixin混合
    组件就是在复用代码,如果组件里面有许多配置是相同的可以借助混合去复用  1.minxin.js//组件就是在复用代码,如果组件里面有许多配置是相同的可以借助混合去复用exportconsthunhe={methods:{showName(){alert(this.name);}},//混合中的生命钩子函数和组件中的钩子......
  • IDE暗黑主题推荐-Dracula
    作为程序员,我们一天中会花费大量时间在编码和阅读代码上。优秀的代码编辑器主题可以减轻眼睛的疲劳,提高工作效率。本文向大家推荐一款非常流行的JetBrainsIDE主题插件-Dracula。它提供了深色调、高对比度的主题风格,是黑暗系编程主题的杰出代表。Dracula的缘起Dracula主......
  • MyBatis-Plus文件上传方法
    网站的文件上传方法本地存储上传//本地存储方式MultipartFile接受文件@PostMapping("/save")publicResultsave(Stringusername,Integerage,MultipartFileimage)throwsIOException{log.info("文件:{},{},{}",username,age,image);......