// 暴力
class Solution {
public int trap(int[] height) {
int res = 0;
for(int i=1;i<height.length-1;i++){
int left = 0;
for(int l = i; l>=0;l--){
left = Math.max(left, height[l]);
}
int right = 0;
for(int r = i; r < height.length;r++){
right = Math.max(right, height[r]);
}
int h = Math.min(left, right);
if(h > height[i]) res += (h - height[i]);
}
return res;
}
}
// 预处理
class Solution {
public int trap(int[] height) {
int len = height.length;
int[] l_max = new int[len];
int[] r_max = new int[len];
l_max[0] = height[0];
for(int i=1;i<len;i++){
l_max[i] = Math.max(height[i], l_max[i-1]);
}
r_max[len-1]=height[len-1];
for(int i=len-2;i>=0;i--){
r_max[i] = Math.max(height[i], r_max[i + 1]);
}
int res = 0;
for(int i=1;i<len-1;i++){
res += (Math.min(l_max[i], r_max[i]) - height[i]);
}
return res;
}
}
// 双指针
class Solution {
public int trap(int[] height) {
int left = 0, right = height.length - 1;
int left_max = height[0], right_max = height[height.length - 1];
int res = 0;
while(left <= right){
if(left_max < right_max){
res += Math.max(0, left_max - height[left]);
left_max = Math.max(left_max, height[left]);
left++;
}else{
res += Math.max(0, right_max - height[right]);
right_max = Math.max(right_max, height[right]);
right--;
}
}
return res;
}
}
经典接雨水
最新推荐文章于 2024-05-31 17:17:25 发布