leetcode C++ 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,
·
一、思路:
左边最高和右边最高求一个最小值减去当前高度,就等于当前能装的水的量
二、代码:
class Solution {
public:
int getMaxRight(vector<int>& height, int index) {
int maxRight = 0;
for (; index < height.size(); index++) {
if (height[index] > maxRight)
maxRight = height[index];
}
return maxRight;
}
int trap(vector<int>& height) {
int res = 0;
int rightMax = getMaxRight(height, 1), leftMax = 0;
for (int i = 0; i < height.size(); i++)
if (rightMax < height[i])
rightMax = height[i];
for (int i = 0; i < height.size(); i++)
{
if (height[i] > leftMax)
leftMax = height[i];
if (height[i] == rightMax)
rightMax = getMaxRight(height, i + 1);
int diff = min(leftMax, rightMax) - height[i];
res += (diff > 0 ? diff : 0);
}
return res;
}
};
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)