题解 | #接雨水问题#
接雨水问题
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; } };
维护左右俩边的最大值,有一点点贪心的思想,就是左右俩边的值谁大那么谁就可以兜底,我们就用小的那一边去计算水的存储容量。