1. 程式人生 > >LeetCode-42. 接雨水

LeetCode-42. 接雨水

題目地址: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;
    }
};