题解 | #接雨水问题#

接雨水问题

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;
    }
};
全部评论

相关推荐

ResourceUtilization:四六级不愧是大学最有用的证之一
点赞 评论 收藏
分享
02-26 16:52
门头沟学院 Java
Lunarloop:董事长亲自到ssob来要IM项目的技术方案来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务