有一个array,size为n,储存的值皆>=0,值代表那格的海拔高度,这样会形成很多凹槽,如果下雨了,会积多少雨水呢?
以下图为例子,答案是6
用2个pointer,i与j ,i先固定,j往後,当j的海拔高大於或等於i的海拔高,代表有可能有凹槽,另外一个情况是走到最後了,都是i大於j,但也要处理一次。
e.g.
接着就先算出最高是多少,所以i与j取小的,然後用一个pointer反走回去直到i,然後计算会积多少水。
这里不能直接用i往前走到j,从上面的例子,应该看的出来会发生什麽事。
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;
}
};
>>: 强型闯入DenoLand[26] - 使用 Deno 打造多线程应用(3)
1137. N-th Tribonacci Number https://leetcode.com/...
手机行动电话 mail app 推荐 IMAP POP 推荐两个 一个是 Microsoft out...
重构是否要排进待办清单里 说到重构,我想只要是软件工程师应该都做过这件事情,只是小时候我们用的术语叫...
前言 有了这些功能後,想要知道能不能跑所有的股票,然後做这些事情,无论是行情订阅,还是历史资料。因此...
前言 忘记一天要发一篇,被自己笨死~~虽然中断了但我还是把它完成吧。 今天一样继续HTML语法吧 超...