[LeetCode30] Day27 - 42. Trapping Rain Water

题目

有一个array,size为n,储存的值皆>=0,值代表那格的海拔高度,这样会形成很多凹槽,如果下雨了,会积多少雨水呢?

以下图为例子,答案是6
https://ithelp.ithome.com.tw/upload/images/20201012/20129147Xl9lZ0OoHn.png

解法

用2个pointer,iji先固定,j往後,当j的海拔高大於或等於i的海拔高,代表有可能有凹槽,另外一个情况是走到最後了,都是i大於j,但也要处理一次。
e.g.
https://ithelp.ithome.com.tw/upload/images/20201012/20129147R45yr6jcEI.png

接着就先算出最高是多少,所以ij取小的,然後用一个pointer反走回去直到i,然後计算会积多少水。
这里不能直接用i往前走到j,从上面的例子,应该看的出来会发生什麽事。

Code

class Solution {
public:
    int trap(vector<int>& height) {
        int trap_water = 0;
        int i = 0;
        int j = 1;
        while(j < height.size()){
             if (height[i] <= height[j] || j == height.size() - 1) {
                int level = min(height[i], height[j]);
                int k = j - 1;
                while (k != i) {
                    level = max(height[k], level);
                    trap_water += level - height[k--];
                }
                i = j;
            }
            
            j++;
        }
        return trap_water;
    }
};

https://ithelp.ithome.com.tw/upload/images/20201012/201291473Pk6Ior5W0.png


<<:  动员大外宣: 拉供应商/合作夥伴一起提升(向下)

>>:  强型闯入DenoLand[26] - 使用 Deno 打造多线程应用(3)

LeetCode解题 Day24

1137. N-th Tribonacci Number https://leetcode.com/...

手机行动电话 mail app 推荐 IMAP POP

手机行动电话 mail app 推荐 IMAP POP 推荐两个 一个是 Microsoft out...

Day 27 重构是否要排进待办清单里

重构是否要排进待办清单里 说到重构,我想只要是软件工程师应该都做过这件事情,只是小时候我们用的术语叫...

【D18】尝试料理:取得所有股票清单

前言 有了这些功能後,想要知道能不能跑所有的股票,然後做这些事情,无论是行情订阅,还是历史资料。因此...

【DAY 05】HTML 标签的基本元素(二)

前言 忘记一天要发一篇,被自己笨死~~虽然中断了但我还是把它完成吧。 今天一样继续HTML语法吧 超...