//接雨水问题
//第一种比较直观
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* max water
* @param arr int整型vector the array
* @return long长整型
*/
long long maxWater(vector<int>& arr) {
long long res =0;
int n =arr.size();
vector<int> left(n+1);
vector<int> right(n+1);
int l_max=0,r_max=0;
for(int i=0;i<n;i++)
{
l_max=max(l_max,arr[i]);
left[i]=l_max;
}
for(int i=n-1;i>=0;i--)
{
r_max=max(r_max,arr[i]);
right[i]=r_max;
}
for(int i=0;i<n;i++)
{
res+=min(left[i],right[i])-arr[i];
}
return res;
}
};
//接雨水问题
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* max water
* @param arr int整型vector the array
* @return long长整型
*/
long long maxWater(vector<int>& arr) {
long long res =0;
int n =arr.size();
int l_h=arr[0],r_h=arr[n-1];
int l=0,r=n-1;
while(l<=r)
{
r_h=max(r_h,arr[r]);
l_h=max(l_h,arr[l]);
if(l_h<r_h)
{
res+= l_h-arr[l];
l++;
}
else if(l_h>r_h)
{
res+= r_h-arr[r];
r--;
}
else {
res+= l_h-arr[l];
l++;
if(l<=r)
{
res+= l_h-arr[r];
}
}
}
return res;
}
};