标签:leetcode
https://oj.leetcode.com/problems/trapping-rain-water/
http://fisherlei.blogspot.com/2013/01/leetcode-trapping-rain-water.html
public class Solution {
public int trap(int[] A) {
// 对于某坐标 有
// - leftmax 它左边最高
// - rightmax 它右边最高
// - val 它本身高度
// 那么它的容积为 max( min(leftmax, rightmax) - val, 0 )
// 那么从左向右遍历 创建 leftmax[]
// 类似 从右向左遍历 创建 rightmax[]
// 最后遍历一遍 计算容积 求和
// O(n)
// Input validations.
if (A == null || A.length == 0)
return 0; // Invalid input.
int len = A.length;
// Build leftmax[]
int[] leftmax = new int[len];
int seenleftmax = 0;
for (int i = 0 ; i < len ; i ++)
{
leftmax[i] = seenleftmax;
if (A[i] > seenleftmax)
seenleftmax = A[i];
}
// Build rightmax[]
int[] rightmax = new int[len];
int seenrightmax = 0;
for (int i = len - 1 ; i >= 0 ; i --)
{
rightmax[i] = seenrightmax;
if (A[i] > seenrightmax)
seenrightmax = A[i];
}
// Calculate result
int result = 0;
for (int i = 0 ; i < len ; i ++)
{
int v = Math.max(Math.min(leftmax[i], rightmax[i]) - A[i] , 0);
result += v;
}
return result;
}
}[LeetCode]42 Trapping Rain Water
标签:leetcode
原文地址:http://7371901.blog.51cto.com/7361901/1598372