题解 | #接雨水问题#

接雨水问题

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

public class Solution {
    public static long maxWater (int[] arr) {
        if(arr.length <= 2){//先判断是否可以容纳水滴
            return 0;
        }
        int sum = 0;
        int start = 0,end = arr.length - 1;
        while(start < end){//总的边界条件
            int i = 0;
            int temp = 0;
            //从两侧最小的值开始往中间遍历,分两种情况:
            //如果下一个值小于起始值,那么遍历计算水滴;
            //如果下一个值大于起始值,那么遍历寻找最高点,从最高点开始遍历计算水滴。
            if(arr[start] <= arr[end]){
                temp = start;
                i = start + 1;
                while(i < end && arr[i] > arr[start]){
                    if (arr[i] >= arr[temp]){
                        temp = i;
                    }
                    i++;
                }
                if (start != temp){//找到范围内最高点
                    start = temp;
                }
                while(i < end && arr[i] < arr[start]){
                    sum =  sum + arr[start] - arr[i];
                    i++;
                }
                start = i;
            }else{
                temp = end;
                i = end - 1;
                while(start < i && arr[i] > arr[end]){
                    if (arr[i] >= arr[temp]){
                        temp = i;
                    }
                    i--;
                }
                if (end != temp){//找到范围内最高点
                    end = temp;
                }
                while(start < i && arr[i] < arr[end]){
                    sum =  sum + arr[end] - arr[i];
                    i--;
                }
                end = i;
            }
        }
        return sum;
    }
}

alt

全部评论

相关推荐

HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
01-12 17:45
门头沟学院 Java
985废物一枚:就是问问你能不能接受北京的房租,hr也知道公司工资不高,大概率是要贴钱的
找实习记录
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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