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.
这道题还是比较简单的,题目问的是水桶最多可以装多少水,其实就是在问任意两条线的横坐标之差乘以两条线最短的那一条的高度的面积最大是多少。即线的长度代表水桶的高度,水桶的宽度为两条线对应的横坐标之差。
class Solution {
public int maxArea(int[] height) {
int maxarea = 0;
for(int i = 0; i < height.length; i++) {
for(int j = i+1; j < height.length; j++) {
maxarea = Math.max(maxarea, countArea(height, i, j));
}
}
return maxarea;
}
public int countArea(int[] height, int x, int y) {
int h = height[x] < height[y] ? height[x] : height[y];
int info = h * (y - x);
return info;
}
}
我的想法就是将所有的组合都遍历一次(用一个选择排序时用到的二重循环),然后每次都和求出的值与之前得到的最大的值作比较,选出较大的作为新的最大值,遍历完了以后就可以得出答案了。