LeetCode-42. 接雨水
阿新 • • 發佈:2018-12-25
題目地址: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; } };