LeetCode-42. 接雨水

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
    }
};

猜你喜欢

转载自blog.csdn.net/l718531794/article/details/85246272
今日推荐