力扣42. 接雨水
发布时间:2024年01月03日
双指针法
- 思路:
- 将数组前后设置为 left、right 指针,相互靠近;
- 在逼近的过程中记录两端最大的值 leftMax、rightMax,作为容器的左右边界;
- 更新指针规则:
- 如果数组左边的值比右边的小,则更新 left 指针,同时累计当前组成的容器的容量;(该容器在更新 leftMax 时闭合)
- 反之,则更新 right 指针,同理累计其组成容器的容量;
class Solution {
public:
int trap(vector<int>& height) {
int capacity = 0;
int left = 0;
int right = height.size() - 1;
int leftMax = 0;
int rightMax = 0;
while (left < right) {
leftMax = std::max(leftMax, height[left]);
rightMax = std::max(rightMax, height[right]);
if (height[left] < height[right]) {
capacity += (leftMax - height[left]);
++left;
} else {
capacity += (rightMax - height[right]);
--right;
}
}
return capacity;
}
};
文章来源:https://blog.csdn.net/N_BenBird/article/details/135352621
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!