Leetcode42. 接雨水

42. 接雨水

做法

考虑单独一列能生产多少贡献:用左右最大值去接这列的水

\(O(n)\)

Code

class Solution {

public:
        int mx[1000000],rx[1000000];
    int trap(vector<int>& height) {
        int n(height.size());
        // int mx(0);
        for(int i=0;i<n;++i){
            if(i==0) mx[i]=height[i];
            else mx[i]=max(mx[i-1],height[i]);
        }
        int ans(0);
        for(int i=n-1;i>=0;--i){
            if(i==n-1) rx[i]=height[i];
            else rx[i]=max(rx[i+1],height[i]);
            ans+=min(rx[i],mx[i])-height[i];
        }
        /*int ans(0);
        for(int i=0;i<n;++i){
            ans+=min(rx[i],mx[i])-height[i];
        }*/
        return ans;
    }
};

原文地址:https://www.cnblogs.com/y2823774827y/p/11110319.html

时间: 2024-10-16 10:58:20

Leetcode42. 接雨水的相关文章

code第一部分:数组 第十四题 雨水问题

code第一部分:数组 第十四题 雨水问题 Given n non-negative integers representing an elevation map where the width of each bar is 1, computehow much water it is able to trap after raining.For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. 分析: 解决方案1 对于每个柱子,找到其左右两

[LeetCode]101. Trapping Rain Water收集雨水

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map is represented by a

收集雨水问题

直方图收集雨水问题: 给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1,若这样形状的容器收集雨水,可以盛多少雨水. 如:输入0,1,0,2,1,0,1,3,2,1,2,1:返回为6. 如图所示: 程序实现: 1 #include <iostream> 2 using namespace std; 3 4 int TrappingRainWater(int A[],int n){ 5 int SecHight = 0;//当前找到的第二大数 6 int left = 0;

LintCode-接雨水

给出 n 个非负整数,代表一张X轴上每个区域宽度为 1 的海拔图, 计算这个海拔图最多能接住多少(面积)雨水. 样例 如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返回 6. 挑战 O(n) 时间, O(1) 空间 O(n) 时间, O(n) 空间也可以接受 分析:只能遍历一遍,且不能存储所有的高度,一块直柱能接的水取决于左右两边较短的高度,所以一个比较直观的方法是从左到有遍历一遍记录该点左边的最大值,从右到左遍历一遍记录该点的右边的最大值,此方法为O(n) 时间

[leetcode] 42. 接雨水

42. 接雨水 思路:一块柱子能接水的量取决于它左右两边最高的柱子中较短的一个. class Solution { public int trap(int[] height) { int left[] = new int[height.length]; int right[] = new int[height.length]; int max = 0; for (int i = 0; i < height.length; i++) { max = Math.max(max, height[i])

leetcode python 042收集雨水

'''给定n个非负整数表示每个条的宽度为1的高程图,计算下雨后能够捕获多少水.例如,鉴于[0,1,0,2,1,0,1,3,2,1,2,1],返回6.这个题要先算出盛满水后的高程图,减去前者就是雨水.盛水多高取决于左右最高的两处低的一方.'''l1=[0,1,0,2,1,0,1,3,2,1,2,1]w=[]for i in range(len(l1)):    w.append(min(max(l1[0:i+1]),max(l1[i:]))-l1[i])print('收集雨水:',sum(w))

Leetcode 407.接雨水

接雨水 给定一个 m x n 的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水. 说明: m 和 n 都是小于110的整数.每一个单位的高度都大于0 且小于 20000. 示例: 给出如下 3x6 的高度图: [ [1,4,3,1,3,2], [3,2,1,3,2,4], [2,3,3,2,3,1] ] 返回 4. 如上图所示,这是下雨前的高度图[[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 的状态. 下雨后,

LeetCode--042--接雨水(java版)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 每次只比较两端的高度,左边小于右边,则在左边比较当前和leftMax的差值,left++,..........right--; 1 class S

42.接雨水 Trapping Rain Water

本人的解法: public class Main { public int trap(int[] height) { // 统计雨水总数//temp登记最大值 int sum = 0; if (height.length != 0) { int temp = height[0]; int temp2 = 0; int temp3 = height[0]; int temp4 = height[height.length - 1]; //跟踪最大值的位置 for (int x = 0; x < h