遍历两遍,从左往右遍历保存当前最大值,从右往左遍历保存当前最大值,然后容水量为 两次遍历最大值中的最小值减去当前arr[i]。累加起来即可。
class Solution {
public:
/**
* max water
* @param arr int整型vector the array
* @return long长整型
*/
long long maxWater(vector<int>& arr) {
// write code here
vector<int> la(arr.size(), 0);
vector<int> ra(arr.size(), 0);
int len = arr.size();
la[0] = arr[0];
ra[len-1] = arr[len-1];
for (int i = 1; i < arr.size(); i++) {
la[i] = max(la[i-1], arr[i]);
ra[len-i-1] = max(ra[len-i], arr[len-i-1]);
}
long long ans = 0;
for (int i = 1; i < len-1; i++) {
if (min(la[i], ra[i]) - arr[i] > 0) ans += min(la[i], ra[i]) - arr[i];
}
return ans;
}
}; 
京公网安备 11010502036488号