zoukankan      html  css  js  c++  java
  • Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

    For example, 
    Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

    只要找到最高的那个柱子,然后从两边往最高的那个柱子移动。

    能存储多少水是由短的那个柱子决定的。

    在i这个位置,如果我们知道i之前最高的柱子j,那么i这个位置能存的水就是height[j]-heigt[i]

    class Solution {
    public:
        int trap(vector<int>& height) {
            int size = height.size();
            if(size<=1){
                return 0;
            }
            int maxHeight = height[0];
            int maxHeightIndex = 0;
            for(int i=1;i<size;i++){
                if(height[i]>maxHeight){
                    maxHeight = height[i];
                    maxHeightIndex = i;
                }
            }
            int res = 0;
            int curMaxHeight = height[0];
            for(int i=1;i<maxHeightIndex;i++){
                if(height[i]<curMaxHeight){
                    res += curMaxHeight-height[i];
                }else{
                    curMaxHeight = height[i];
                }
            }
            curMaxHeight = height[size-1];
            for(int i=size-2;i>maxHeightIndex;i--){
                if(height[i]<curMaxHeight){
                    res += curMaxHeight-height[i];
                }else{
                    curMaxHeight = height[i];
                }
            }
            return res;
        }
    };
  • 相关阅读:
    MySQL库表设计小技巧
    教你用SQL实现统计排名
    Truncate用法详解
    utf8字符集下的比较规则
    关于Aborted connection告警日志的分析
    MySQL DDL详情揭露
    时间戳,这样用就对了
    在线修改主从复制选项
    20181211HW
    20181207hw
  • 原文地址:https://www.cnblogs.com/zengzy/p/5005300.html
Copyright © 2011-2022 走看看