LeetCode 42 - Trapping Rain Water

来源:互联网 发布:有趣的c语言表白程序 编辑:程序博客网 时间:2024/05/16 18:26

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.


The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

My Two Pass Code

class Solution {public:    int trap(vector<int>& height) {        int size = height.size();        int start = 0, end = size - 1;        int total = 0;        // Left to right        for (int i = 1; i < size; i++)        {            if (height[i] >= height[start])            {                if (i == start + 1)                    start= i;                else                {                    end = i;                    // Caculate                    int s = min(height[start], height[end]) * (end - start - 1);                    cout << start << " " << end << " " << s << endl;                    for (int j = start + 1; j < end; j++)                        s -= height[j];                    total += s;                    start = end;                }            }        }        // Right to left        start = size - 1, end = 0;        for (int i = size - 2; i >= 0; i--)        {            if (height[i] > height[start])            {                if (i == start - 1)                    start= i;                else                {                    end = i;                    // Caculate                    int s = min(height[start], height[end]) * (start - end - 1);                    for (int j = start - 1; j > end; j--)                        s -= height[j];                    total += s;                    start = end;                }            }        }        return total;    }};

Runtime: 20 ms


My One Pass Code

class Solution {public:    int trap(vector<int>& height) {        int size = height.size();        int start = 0, end = size - 1;        int max_left_height = 0, max_right_height = 0;        int total = 0;        while (start <= end)        {            if (height[start] <= height[end])            {                if (height[start] <= max_left_height)                    total += max_left_height - height[start];                else                    max_left_height = height[start];                start++;            }            else            {                if (height[end] <= max_right_height)                    total += max_right_height - height[end];                else                    max_right_height = height[end];                end--;            }        }        return total;    }};
Runtime: 8 ms

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 判缓期间在行政拘留怎么办 法院拘留15天工作怎么办 高血压签定了无期限合同怎么办 法院司法拘留找不到人怎么办 c1骑摩托车要拘留怎么办 欠钱的找不到人怎么办 治安拘留人跑了怎么办 行政拘留拘留所不收应该怎么办 在看守所被打了怎么办 取保候审超过12个月怎么办 拘留20天还没有判刑怎么办 被打了没有证据怎么办 拘留37天后没有放人怎么办 强制执行执行的财产不够怎么办 收到公安局拘留通知家属应该怎么办 对方不出谅解书怎么办 寻衅滋事没抓的 怎么办 公务员政审父母拘留过怎么办 我参与了网赌怎么办 亲人出车祸去世家属怎么办 车牌换了原保险怎么办 北京车牌夫妻变更车险怎么办 赌博拘留15天不交罚款怎么办 给人打了不赔钱怎么办 打了人对方讹钱怎么办 换车了原来的etc怎么办 换异地车牌了etc怎么办 被执行人拘留15天后不还钱怎么办 被执行人拘留后还是不还钱怎么办 摩托车套牌被交警扣了怎么办 套牌摩托车遇到交警怎么办 不知情收到小偷东西了怎么办 盗窃罪法院判定农民赔钱没钱怎么办 公安局通知家属取刑拘通知书怎么办 老公诈骗坐牢家人该怎么办 家人被拘留我该怎么办 车牌被偷了一个怎么办 车牌给人家偷了怎么办 收购了偷来的铝怎么办 员工自动离职后档案怎么办 辞职了老板不发工资怎么办