363. 接雨水
给出
n
个非负整数,代表一张X轴上每个区域宽度为
1
的海拔图, 计算这个海拔图最多能接住多少(面积)雨水。
样例
样例 1:
输入: [0,1,0]
输出: 0
样例 2:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
挑战
O(n) 时间, O(1) 空间
O(n) 时间, O(n) 空间也可以接受
public class Solution {
/**
* @param heights: a list of integers
* @return: a integer
*/
public int trapRainWater(int[] nums) {
if (nums.length < 3) {
return 0;
}
int sum = 0;
int length = nums.length - 2;
for (int i = 0; i < length; i++) {
if (nums[i] == 0 || nums[i] < nums[i + 1]) {
continue;
}
int j = i + 1;
int start = 0;
while (true) {
if (j == nums.length - 1) {
while (j > i) {
if (nums[j] == 0 || nums[j] < nums[j - 1]) {
j--;
continue;
}
int k = j - 1;
start = 0;
while (k > i) {
if (nums[k] >= nums[j]) {
break;
}
start += nums[j] - nums[k];
k--;
}
sum += start;
j = k;
}
return sum;
}
if (nums[j] >= nums[i]) {
break;
}
start += nums[i] - nums[j];
j++;
}
sum += start;
i = j - 1;
}
return sum;
}
}