题解 | #接雨水问题#

接雨水问题

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

首先找到整个序列的最大值,然后从左右两端 往最大值进行计算。 令sum 是储水量。 从低处往高处走计算步骤 首先是左侧最高点的设为 max,接着往右走如果当前的高度 arr[i] 比 max 小则 sum = sum + (max - arr[i]) 如果当前高度比max 高则更新max = arr[i]. 从高处往低处走则比较麻烦,但是我们可以转换问题,将从高处往低处 反过来 变成从低处往高处走 就能继续用上面的方法了。 所以我们只要找到全局最高处,那么两段往最高处走 就是低处往高处走。

long long maxWater(vector<int>& arr) {
        long long sum = 0;
        long long max = 0;
        if(arr.size()==0 || arr.size()==1)
        {
            return sum;
        }
        max = arr[0];
        int num = 0;
        int index = 0;
        
        for(int i=1; i<arr.size(); ++i)
        {
            if(arr[i] > max)
            {
                index = i;
                max = arr[i];
            }
        }
        int temp_max = arr[0];
        for(int i=1; i<index; ++i)
        {
            if(arr[i] <= temp_max)
            {
                sum = sum + temp_max-arr[i];
            }
            else
            {
                temp_max = arr[i];
            }
            
            
                      
        }
        temp_max = arr[arr.size()-1];
        
        for(int i= arr.size()-2; i > index; --i)
        {
            if(arr[i] <= temp_max)
            {
                sum = sum + temp_max-arr[i];
            }
            else
            {
                temp_max = arr[i];
            }
            
        }
        
        
        return sum;
        
        // write code here
    }
};
全部评论

相关推荐

2025-11-15 14:35
南京邮电大学 Java
程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
牛马人的牛马人生:一开始看成了网吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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