题解 | #接雨水问题#

接雨水问题

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

    public long maxWater (int[] arr) {
        int L = 0;
        int R = arr.length-1;
        int res = 0;
        while(L<arr.length-1 && arr[L]<arr[L+1]) L++;
        while(R>0 && arr[R]<arr[R-1]) R--;
        int maxL = arr[L];
        int maxR = arr[R];
        int max = 0;
        int index = 0;
        for(int i = L; i<=R; i++){
            if(arr[i]>max) {
                index = i;
                max = arr[i];
            }
        }
        for(int i = L; i<=index; i++){
            if(arr[i] >= maxL){
                maxL = arr[i];
            }else{
                res+=Math.min(maxL,arr[index])-arr[i];
            }
        }
        for(int i = R; i>=index; i--){
            if(arr[i] >= maxR){
                maxR = arr[i];
            }else{
                res+=Math.min(maxR,arr[index])-arr[i];
            }
        }
        return res;
    }

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务