接雨水(leetcode hot100)

简介: 接雨水(leetcode hot100)

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

思路:其实核心就一句话,所接的雨水等于左右侧height最大值中较小的哪一个-当前的height,理解之后借用leetcode官方的图,二者中取最小值即是答案。

代码:

class Solution {
public:
    int trap(vector<int>& height) {
        int n=height.size();
        if(n==0)return 0;
        vector<int> leftmax(n);
        leftmax[0]=height[0];
        for(int i=1;i<n;i++){
            leftmax[i]=max(leftmax[i-1],height[i]);
        }
        vector<int> rightmax(n);
        rightmax[n-1]=height[n-1];
        for(int i=n-2;i>=0;i--){
            rightmax[i]=max(rightmax[i+1],height[i]);
        }
        int ans=0;
        for(int i=0;i<n;i++){
            ans+=min(leftmax[i]-height[i],rightmax[i]-height[i]);
        }
        return ans;
    }
};
相关文章
|
6月前
滑动窗口最大值(leetcode hot100)
滑动窗口最大值(leetcode hot100)
二叉树中的最大路径和(力扣热题HOT100 之 力扣124)java
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
138 0
二叉树中的最大路径和(力扣热题HOT100 之 力扣124)java
|
算法 Java
二叉树展开为链表(力扣热题HOT100 之 力扣114)Java
给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。
120 0
二叉树展开为链表(力扣热题HOT100 之 力扣114)Java
最大正方形(力扣热题HOT100 之 力扣221)java动态规划
最大正方形(力扣热题HOT100 之 力扣221)java动态规划
104 0
最大正方形(力扣热题HOT100 之 力扣221)java动态规划
|
机器学习/深度学习 存储 算法
Leetcode hot100题 个人整理版(一)
Leetcode hot100题 个人整理版
116 0
Leetcode hot100题 个人整理版(一)
|
存储 C语言
LeetCode 热题HOT100-两数之和(C语言)
LeetCode 热题HOT100-两数之和(简单)两种方法解答
LeetCode 热题HOT100-两数之和(C语言)
移动零(力扣热题HOT100 之 力扣283)java
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。
|
算法 Java
最长连续序列(力扣热题HOT100 之 力扣128)Java
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
172 0
|
Java 索引
跳跃游戏(力扣热题HOT100 之 力扣55)Java 贪心
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。
回文字串(力扣热题HOT100 之 力扣647)java多种方法
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。