1.题目
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
2.答案
class Solution {
public int maxArea(int[] height) {
//第一次:超出时间限制
// int max = 0;
// int temp = 0;
// for (int left = 0; left < height.length-1; left++) {
// for (int rignt = 1; rignt < height.length; rignt++) {
// temp=(rignt-left)*Math.min(height[left],height[rignt]);
// max = Math.max(temp,max);
// }
// }
// return max;
//第二次
int max = 0;
int temp = 0;
int rignt = height.length-1;
for (int left = 0; left < rignt;) {
temp=(rignt-left)*Math.min(height[left],height[rignt]);
max = Math.max(temp,max);
if(height[left]>height[rignt]){
rignt--;
}else {
left++;
}
}
return max;
}
}
3.理解
一上来用暴力方式解答用例直接超时。
后来看题解:
宽度变小的时候:总是替换最小的高度,高度变大有可能乘积变大;如果替换掉最大的高度,乘积一定变小。