题目:对非负序列a1,a2,……,an,在数轴上做垂线连接点(i,0)和(i,ai)。选择这样的两条线和x轴可以形成一个容器,我们以面积代表所装的水,求以这种方式构成的容器能装的最大面积。比如选择a2=3,a5=6,则所装的面积为9.
思路分析:
从两端逼近,求最大面积。
代码:
package 华为机试题;
import java.util.LinkedList;
/**
* @author Hutongling
*
* @time:2017年4月24日 下午1:58:21
*/
public class 求容器最大面积 {
static int maxArea(int[] height) {
int water = 0;
int i = 0, j = height.length - 1;
while (i < j) {
int h = height[i] > height[j] ? height[j] : height[i];
water = water > (j - i) * h ? water : (j - i) * h;
while (height[i] <= h && i < j)
i++;
while (height[j] <= h && i < j)
j--;
}
return water;
}
public static void main(String[] args) {
int height[]={1,2,5,3,1,5,3,9};
System.out.print("最大的面积为:" + maxArea(height));
}
}
代码结果:
最大的面积为:25