先找出最大值的下标,如果相等就取右边的那个。遍历元素,左边:当前高度要小于左边的最高高度就可以接水,如果大于了左边的最高高度就更新左边的最大高度。右边:当前高度要小于右边的最大高度,能接的水就是右边最大高度减去当前高度,如果当前高度大于等于了最大高度就更新最大高度。注意:最左边和最右边没法接水的。
class Solution {
public int trap(int[] height) {
int maxValue = 0;
int res = 0;
int maxIndex = -1;
int t=0;
for(int i = 0;i < height.length; i++){
if(height[i] >= maxValue){
maxValue = height[i];
maxIndex = i;
}
}
for(int i = 1; i < maxIndex; i++){
if(height[i] < height[t]){
res+=(height[t] - height[i]);
}else{
t = i;
}
}
t = height.length-1;
for(int i = height.length-2; i > maxIndex; i--){
if(height[i] < height[t]){
res+=(height[t] - height[i]);
}else{
t = i;
}
}
return res;
}
}
时间复杂度O(N),有限级变量。O(1).