一. 题目信息
1. 描述
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 题目链接:https://leetcode-cn.com/problems/trapping-rain-water/
2. 示例
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
二. 解法
1. 双指针
算法思路:左右两个指针向中间靠拢,高度低的先靠拢,靠拢的过程中会维护左右最高值
①. 复杂度分析
②. c++解法
class Solution {
public:
int trap(vector<int>& height) {
int leftmax = 0, rightmax = 0;
int left = 0, right = height.size() - 1;
int ans = 0;
while (left < right) {
int l = height[left];
int r = height[right];
if (l <= r) {
l >= leftmax ? (leftmax = l) : (ans += leftmax - l);
left++;
} else {
r >= rightmax ? (rightmax = r) : (ans += rightmax - r);
right--;
}
}
return ans;
}
};
|