LeetCode-Trapping Rain Water解法

解法:(1)建立一个二维数组,记录各位置左侧最高点及右侧最高点,可通过O(n)计算得到。

(2)根据上述信息及当前高度,计算该点竖直方向能容纳多少水,仍是O(n)完成。

综上,渐近时间复杂度为O(n);

class Solution {

public:

int trap(int A[], int n) {

if(n<=0)

return 0;

int* high=new int[n*2];

high[0*2+0]=0;

for(int i=1;i<n;i++){

if(A[i-1]>high[(i-1)*2+0])

high[i*2+0]=A[i-1];

else

high[i*2+0]=high[(i-1)*2+0];

}

high[(n-1)*2+1]=0;

for(int i=n-2;i>=0;i--){

if(A[i+1]>high[(i+1)*2+1])

high[i*2+1]=A[i+1];

else

high[i*2+1]=high[(i+1)*2+1];

}

int sum=0;

for(int i=0;i<n;i++){

int tmp=high[i*2+0]>high[i*2+1]?high[i*2+1]:high[i*2+0];

tmp=tmp-A[i];

if(tmp<0)

tmp=0;

sum+=tmp;

}

delete[] high;

return sum;

}

};

时间: 2024-08-26 03:28:07

LeetCode-Trapping Rain Water解法的相关文章

[leetcode]Trapping Rain Water @ Python

原题地址:https://oj.leetcode.com/problems/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,

[LeetCode] [Trapping Rain Water 2012-03-10]

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

LeetCode: Trapping Rain Water [041]

[题目] 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

[LeetCode] Trapping Rain Water II 收集雨水之二

Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevation map, compute the volume of water it is able to trap after raining. Note: Both m and n are less than 110. The height of each unit cell is greater th

LeetCode: Trapping Rain Water 解题报告

https://oj.leetcode.com/problems/trapping-rain-water/ Trapping Rain WaterGiven 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,

LeetCode——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

Leetcode: Trapping Rain Water II

Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevation map, compute the volume of water it is able to trap after raining. Note: Both m and n are less than 110. The height of each unit cell is greater th

[LeetCode] 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

[LeetCode] Trapping Rain Water

Note: The following idea is in fact from the last answer in this link, which leads to a clean code. I just reorganize it and add some explanations. I hope it is Ok. The following are four solutions in C/C++/Java/Python respectively. The basic idea is

leetcode Trapping Rain Water pthon

class Solution(object): def trap(self,nums): leftmosthigh = [0 for i in range(len(nums))] leftmax=0 for i in range(len(nums)): if nums[i] > leftmax: leftmax=nums[i] leftmosthigh[i] = leftmax print leftmosthigh sums=0 rightmax=0 for i in reversed(rang