版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l718531794/article/details/85246272
题目地址:https://leetcode-cn.com/problems/trapping-rain-water/
思路:我们想一下倒水的场景,我们分别从最高处往两边倒水,那么水就会不断的向两边流去,当出现凹槽时,水就会留下。所以就分两段进行一个模拟,对于同高度的凹槽,只需要处理一次,所以第二个循环时不需要对等于的情况计数。结果8ms。
AC代码:
class Solution {
public:
int trap(vector<int>& height) {
int n = height.size();
int pre = 0;
int ans = 0;
int sum = 0;
for(int i=1;i<n;i++){
if(height[i]>=height[pre]){
ans+=(i-pre-1)*height[pre]-sum;
sum = 0;
pre = i;
}else{
sum+=height[i];
}
}
pre = n-1;
sum = 0;
for(int i=n-2;i>=0;i--){
if(height[i]>height[pre]){
ans+=(pre-i-1)*height[pre]-sum;
sum = 0;
pre = i;
}else{
sum+=height[i];
}
}
return ans;
}
};