题意:给定 n 个非负整数表示每个宽度为 1 的柱子,计算按此排列的柱子,后能接多少雨水。
思路:设置首尾指针,比较首尾指针,从数字较小的一边开始移动,直到找到大于当前较小数字的数,移动过程中累积积水量,重新比较首尾指针的数,循环以上过程(具体可见代码)
思想:利用数组index来解决问题
复杂度:时间O(n),空间O(1)
class Solution {
public int trap(int[] height) {
int res = 0;
int l = 0;
int r= height.length - 1;
while(l<r) {
// 右边的数小
if(height[l] >= height[r]) {
int temp = r;
// 不停的向左遍历数组,直到找到比当前尾指针数大的数
while(temp>l && height[temp] <= height[r]) {
// 尾指针-当前小的数即为,当前index可积水量
res += height[r] - height[temp];
temp--;
}
// 更新尾指针
r = temp;
} else {
// 首支针类似
int temp = l;
while(temp<r && height[temp]<= height[l]) {
res += height[l] - height[temp];
temp++;
}
l = temp;
}
}
// 返回结果
return res;
}
}
网友评论