Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container and n is at least 2.
一个序列表示n个木板的高度,找其中两个木板,使得之间能存放最大的水量。
思路:用两个指针head和tail指向数组的左边和右边,计算area=min(height[head], height[tail]) * |head - tail|,记录下每次最大的area;每次移动的时候:移动比较矮的那一根木板。
public class Solution {
public int maxArea(int[] height) {
int area = 0, head = 0, tail = height.length - 1;
while (head < tail) {
area = Math.max(area, (tail - head) * Math.min(height[head], height[tail]));
if (height[head] < height[tail])
++head;
else
--tail;
}
return area;
}
}