思路
用左右两个指针遍历数组,每次移动一个指针,另一个指针不动,每移动一次就计算一次容量。容量=(r-l)*min。左右指针最小值为min。此时基本思路已经知道了,就剩下指针如何移动了。无论是移动短板或者长板,我们都只关注移动后的新短板会不会变长,而每次移动的木板都只有三种情况,比原短板短,比原短板长,与原短板相等;如向内移动长板,对于新的木板:1.比原短板短,则新短板更短。2.与原短板相等或者比原短板长,则新短板不变,容量变小。所以,向内移动长板,一定不能使新短板变长。
代码
class Solution {
public int maxArea(int[] height) {
int n = height.length;
int res = 0;
int left = 0;
int right = n-1;
int min = 0;
int minIndex = 0;
while(right>left){
min = height[left]>=height[right]?height[right]:height[left];
res = res>(right-left)*min?res:(right-left)*min;
if(height[left]>=height[right]){
right--;
}else{
left++;
}
}
return res;
}
}