给定 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 Solution { 2 public int trap(int[] height) { 3 int left = 0; 4 int right = height.length-1; 5 int rightMax = 0; 6 int leftMax = 0; 7 int res = 0; 8 while(left < right){ 9 if(height[left] < height[right]){ 10 leftMax = Math.max(height[left],leftMax); 11 res += leftMax - height[left]; 12 left++; 13 }else{ 14 rightMax = Math.max(height[right],rightMax); 15 res += rightMax - height[right]; 16 right--; 17 } 18 } 19 return res; 20 } 21 }
2019-03-1019:21:32
原文地址:https://www.cnblogs.com/NPC-assange/p/10506554.html
时间: 2024-10-09 03:38:24