问题描述:
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/container-with-most-water
解决思路:
我已经在注释中写明了过程,这道题的难度咋一看还行,仔细一看就简单异常
1.首先确认它的面积公式:随便挑两个数,下标的差值乘以两数的较小数
2.列出所有可能性(这边有一个优化点)
去除前后颠倒但是结果一样的组合 (从前往后扫描,去除反向扫描)
也就是说 每次扫描只要扫描 i往后的数 故j=i+1
/*
*作者:赵星海
*时间:2020/7/25 14:53
*用途:盛最多水的容器
*/
public int maxArea(int[] height) {
//首先要明白 随便挑两个数 它的面积公式是 下标的差值乘以两数的较小数
int max = 0;
//简单粗暴,列出所有可能性
for(int i = 0;i<height.length-1;i++){
//j=i+1 提高效率 去除前后颠倒结果一样的组合 (从前往后扫描,去除反向扫描)
for(int j= i+1;j<height.length;j++){
int x = (j-i)*Math.min(height[i],height[j]);
if(x>max){
max = x;
}
}
}
return max;
}