42.接雨水
链接
https://leetcode-cn.com/problems/trapping-rain-water/
代码
class Solution {
public:
int trap(vector<int>& height) {
int left = 0;
int right = height.size() - 1;
int left_max = 0;
int right_max = 0;
int ans = 0;
while(left < right){
if(height[left] <= height[right]){
if(height[left] > left_max){
left_max = height[left];
}
ans += left_max - height[left];
left++;
}
if(height[left] > height[right]){
if(height[right] > right_max){
right_max = height[right];
}
ans += right_max - height[right];
right--;
}
}
return ans;
}
};
总结
主要思想为双指针,从左右两侧分别向对侧遍历,维护左侧与右侧的最大高度,分别与左右指针做差累加。