前言:
左右最大值中小的减去当前就是此处有的雨水
可以用额外空间来存储左右的最大值
如何进行空间优化?
/*
首尾作为maxLeft,maxRight,后一个前一个为left/right
当maxLeft<maxRight,我们可以得出left=maxleft-hgiht[left],再求左边最大
反之 right=maxRight-hgiht[right]
*/
class Solution {
public int trap(int[] height) {
int len = height.length;
if(len<3) return 0;
int left = 1;
int right = len-2;
int max_left = height[0];
int max_right = height[len-1];
int sum = 0;
while(left<=right)
{
if(max_left<max_right)
{
sum += Math.max( max_left - height[left] , 0 );
max_left = Math.max( max_left, height[left] );
left++;
}
else
{
sum += Math.max( max_right - height[right] , 0 );
max_right = Math.max( max_right, height[right] );
right--;
}
}
return sum;
}
}
42.接雨水
最新推荐文章于 2024-07-18 08:26:33 发布