题解 | #盛水最多的容器#
盛水最多的容器
http://www.nowcoder.com/practice/3d8d6a8e516e4633a2244d2934e5aa47
java版——双指针
容量是由最小的那个边决定的,即
area = min(height[legt], height[right]) * (right - left)
然后我们每次移动较小的边,比如, height[left] < height[right]
,那我们就让 left++
。
为什么呢? 因为如果我们移动较大的边,那么移动后得到的容量一定会比现在小。即使较大边移动后遇到更大的边,但是容量是由较小边决定的,即容器的高度还是 height[left]
,但是宽度却变小了。所以移动较大边必不可能得到一个更大的容器,而移动较小边是有可能得到一个更大的容器的。
public class Solution {
public int maxArea (int[] height) {
int left = 0;
int right = height.length - 1;
int maxVal = 0;
while(left < right){
int area = Math.min(height[left], height[right]) * (right - left);
maxVal = Math.max(maxVal, area);
if(height[left] < height[right]){
left++;
}else{
right--;
}
}
return maxVal;
}
}