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;
        }
    };
  • 相关阅读:
    最短路问题之Dijkstra算法
    最短路问题之Bellman-ford算法
    最小生成树之Kruskal(克鲁斯卡尔)算法
    二分图问题
    七桥问题与欧拉道路
    拓扑排序
    八连通块
    四连通检测
    USACO19DEC题解
    1206 雅礼集训D2题解
  • 原文地址:https://www.cnblogs.com/zengzy/p/5005300.html
Copyright © 2011-2022 走看看