public int maxArea(int[] height) {
int max = 0;
int left = 0;
int right = height.length - 1;
while (left < right) {
//左右区间的面积
final int curr = (right - left) * (Math.min(height[left], height[right]));
max = Math.max(max, curr);
//移动较小的那个
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return max;
}
public int trap(int[] height) {
int len = height.length;
int[] leftMax = new int[len];
leftMax[0] = height[0];
for (int i = 1; i < len; i++) {
leftMax[i] = Math.max(leftMax[i - 1], height[i]);
}
int[] rightMax = new int[len];
rightMax[len - 1] = height[len - 1];
for (int i = len - 2; i >= 0; i--) {
rightMax[i] = Math.max(rightMax[i + 1], height[i]);
}
int res = 0;
for (int i = 0; i < len; i++) {
res += Math.min(leftMax[i], rightMax[i]) - height[i];
}
return res;
}
题解2:
java复制代码
public int trap(int[] height) {
int res = 0;
int len = height.length;
int leftMax = 0;
int rightMax = 0;
int left = 0;
int right = len - 1;
while (left <= right) {
leftMax = Math.max(leftMax, height[left]);
rightMax = Math.max(rightMax, height[right]);
if (leftMax < rightMax) {
res += leftMax - height[left];
left++;
} else {
res += rightMax - height[right];
right--;
}
}
return res;
}