当前位置: 首页 > article >正文

接雨水

接雨水

  • 1、 题目描述
  • 2、解题思路

1、 题目描述

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
在这里插入图片描述

2、解题思路

本题使用了双指针,根据下图可以得出,下标 i 处能接的雨水量由左边最大值 leftMax 和右边最大值 rightMax 中的最小值决定,因此设置左指针left和右指针right,左指针只会向右移动,右指针只会向左移动,遍历的过程中持续更新 leftMax 和 rightMax 。

  • 若 leftMax < rightMax,下标 left 处能接的雨水量等于 leftMax−height[left],将下标 left 处能接的雨水量加到能接的雨水总量,然后将 left 加 1(即向右移动一位)
  • 若 leftMax ≥ rightMax,下标 right 处能接的雨水量等于 rightMax−height[right],将下标 right 处能接的雨水量加到能接的雨水总量,然后将 right 减 1(即向左移动一位)

在这里插入图片描述

class Solution {
    public int trap(int[] height) {
        // 定义左右指针
        int left=0,right=height.length-1;
        // 定义左边最大值和右边最大值
        int leftMax=0,rightMax=0;
        // 定义最终结果
        int ans = 0;

        // 两个指针相遇为循环结束条件
        while(left<right){
            // 判断当前高度是否比最大高度大,若是,更新最大高度
            if(height[left]>leftMax)
                leftMax = height[left];
            if(height[right]>rightMax)
                rightMax = height[right];

            // 下标i处能接到的雨水量由leftMax和rightMax的最小值决定
            if(leftMax<rightMax){
                ans += leftMax-height[left];
                left++;
            }
            else{
                ans += rightMax-height[right];
                right--;
            }
        }

        return ans;
    }
}
  • 时间复杂度:O(n),其中 n 是数组 height 的长度。两个指针的移动总次数不超过 n。
  • 空间复杂度:O(1)。只需要使用常数的额外空间。

http://www.kler.cn/a/404402.html

相关文章:

  • 五天SpringCloud计划——DAY1之mybatis-plus的使用
  • Proxy 在 JavaScript的用法
  • 虚拟机上搭建达梦DSC简略步骤
  • 大数据新视界 -- Impala 性能优化:量子计算启发下的数据加密与性能平衡(下)(30 / 30)
  • 游戏引擎学习第15天
  • RFdiffusion rigid_from_3_points函数解读
  • 智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序8 进化论及科学的信息技术创新:分布式账本/区块链/智能合约 之2
  • yolov5 数据集分享:纯干货
  • GEE 训练教程——Sentinel-1的卷积(核函数)的分析和可视化
  • this.$prompt 限制输入长度
  • Windows环境GeoServer打包Docker极速入门
  • 出海第一步:搞定业务系统的多区域部署
  • 大模型-微调与对齐-非强化学习的对齐方法
  • CSS3 动画:前端开发的动态美
  • 实现了图像处理、绘制三维坐标系以及图像合成的操作
  • 对原jar包解压后修改原class文件后重新打包为jar
  • RestTemplate应用实践总结
  • 请问有什么限制预约报名人数的微信小程序/系统?
  • Arcgis 绘制地图
  • buuoj WEB做题笔记
  • scratch二次开发:控制blocks某些块不可以被删除
  • 堤防安全监测系统方案
  • 【C++篇】从基础到进阶:全面掌握C++ List容器的使用
  • 《Vue零基础教程》(2)Vue搭建环境+案例学习
  • 如果接口返回值图片有很长一串码,需要添加前缀
  • 在Linux中使用 epoll 处理TCP连接断开问题