【数组】42. 接雨水

题目:

 

 

解答:

 

 图解:

 

 

 1 class Solution {
 2 public:
 3     int trap(vector<int>& height) 
 4     {
 5         int ans = 0;
 6         stack<int> st;
 7         for (int i = 0; i < height.size(); i++)
 8         {
 9             while (!st.empty() && height[st.top()] < height[i])
10             {
11                 int cur = st.top();
12                 st.pop();
13                 if (st.empty()) 
14                 {
15                     break;
16                 }
17                 int l = st.top();
18                 int r = i;
19                 int h = min(height[r], height[l]) - height[cur];
20                 
21                 ans += (r - l - 1) * h;
22             }
23             st.push(i);
24         }
25         return ans;
26     }
27 };

 

posted @ 2020-05-05 21:04  梦醒潇湘  阅读(145)  评论(0)    收藏  举报