题解 | #接雨水问题#
接雨水问题
https://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
class Solution {
public:
/**
* max water
* @param arr int整型vector the array
* @return long长整型
*/
long long maxWater(vector<int>& arr) {
// 双指针
int left=0;
int right=arr.size()-1;
int sum=0;
int leftval=arr[0];
int rightval=arr[right];
left++;
right--;
while(left<=right)
{
if(leftval<rightval)
{
sum+=leftval-arr[left]>0?leftval-arr[left]:0;
if(arr[left]>leftval)
leftval=arr[left];
left++;
}else
{
sum+=rightval-arr[right]>0?rightval-arr[right]:0;
if(arr[right]>rightval)
rightval=arr[right];
right--;
}
}
return sum;
}
};
维护左右俩边的最大值,有一点点贪心的思想,就是左右俩边的值谁大那么谁就可以兜底,我们就用小的那一边去计算水的存储容量。