一、题目
二、代码
暴力解法
根据木桶法则,找到最小的边,即该容器的高。
class Solution {
public int maxArea(int[] height) {
int maxv = 0;
for(int i = 0; i < height.length; i++){
for(int j = i+ 1; j < height.length; j++){
maxv = Math.max(maxv, (j - i)* Math.min(height[i], height[j]));
}
}
return maxv;
}
}
双指针解法更优
- 设置双指针 i j分别于容器的两端
- 每次选定围成水槽两板高度 height[i]和height[j] 中的短板,向中间收窄 1格。
public int maxArea(int[] height) {
int maxv= 0;
int i = 0;
int j = height.length - 1;
while (i < j) {
int v = (j - i) * Math.min(height[i], height[j]);
maxv= Math.max(maxv, v);
if (height[i] < height[j]) {
i++;
}else {
j--;
}
}
return maxv;
}