题解 | #接雨水问题#

接雨水问题

http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f

public:
    /**
     * max water
     * @param arr int整型vector the array
     * @return long长整型
     从左侧维护一个左侧最高值 单调栈,从右侧开始遍历找到能存雨水的位置,找到后计算并更新右侧最高
     */
    long long maxWater(vector<int>& arr) {
        // write code here
        stack<int> st;
        int n = arr.size();
        for(int i=0;i<n-1;i++){
            if(st.empty() || arr[i] > st.top()){
                st.push(arr[i]);
            }else{
                st.push(st.top());
            }
        }
        int r = arr[n-1];
        long long res = 0;
        for(int i=n-2;i>=1;i--){
            
            if(arr[i] < st.top() && arr[i] < r){
                res +=min(st.top(), r) - arr[i];  
            }
            if(arr[i] > r){
                r = arr[i];
            }
            st.pop();
        }
        return res;
    }
};
全部评论

相关推荐

AAA不喝拿铁:校友好,开投就完事了!要准备面试的话更建议刷codetop,hot100有些题并不是面试常考题。另外想看刷题路线的可以看我的帖子,有讲怎么刷leetcode,除此之外可以看看我根据真实面经整理得到的最全(高/中/低频)面试题,加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务