题目
给出一个数组,每个元素(非负)代表高,计算两个元素和坐标围成的水桶最多能装满多少水。
1 题目很容易理解错误,特别是做了大量这类题目之后。
2 理解清楚题目之后,明白任意个水桶只和 a 这两个元素的最小的那个 b 这两个元素的坐标差值有关。
3 假设元素同样大小,那么最多的时候,是选取最远的两个坐标。
4 当不相同的时候,可以慢慢把坐标接近,替换最小的那个边。看看是不是有可能产生一个更大更高的水桶。
5 能够完成上面思路,代码就容易写出来了。
public class Solution {
public int maxArea(int[] height) {
if(height.length==0){
return 0;
}
int max=Integer.MIN_VALUE;
int i = 0;
int j = height.length-1;
while(i<j){
int l = Math.min(height[i],height[j]);
max = Math.max(max,l*(j-i));
if(height[i]<height[j]){
i++;
}
else{
j--;
}
}
return max;
}
}
15.3.17
重新做的时候,想到为什么不用while而用if做坐标移动。1,2,4,3这组就能解释,每次移动都要考虑一下可能性。