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^2的暴力穷解法,不出意外的超时了。
于是只能采用两端往中间挤的naive贪心算法。
下边是Java代码
public class Solution {
public int maxArea(int[] height) {
int fort = 0;
int tail = height.length-1;
int maxarea = Math.min(height[fort],height[tail])*(tail-fort);
while(fort != tail){
if (height[fort] < height[tail]) {
fort++;
int curarea = Math.min(height[fort],height[tail])*(tail-fort);
if (curarea > maxarea) maxarea = curarea;
}
else {
tail--;
int curarea = Math.min(height[fort],height[tail])*(tail-fort);
if (curarea > maxarea) maxarea = curarea;
}
}
return maxarea;
}
}