标签: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