题目:
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
方法一:暴力破解,双层for循环遍历所有情况。
public class Solution {
public int maxArea(int[] height) {
int max = 0;
for (int i = 0; i < height.length - 1; i++) {
for (int j = i + 1; j < height.length; j++) {
if (max < Math.min(height[i], height[j]) * (j - i)) {
max = Math.min(height[i], height[j]) * (j - i);
}
}
}
return max;
}
这种解法虽然能得到答案,但太耗时,效率太低。
方法二:使用双指针
我们先分析一下,题目要求算出水的最大体积,根据示例1的图不难得出水的体积等于两条垂直