暴力解法
图解
java
class Solution {
public int maxArea(int[] a) {
if(a.length < 1) return 0;
int res=0;
int len = a.length;
for(int j = 0; j < len; j ++){
for(int i = j+1; i < len; i++){
res = Math.max(res, (i-j)*Math.min(a[i],a[j]));
}
}
return res;
}
}
双指针优化
class Solution {
public int maxArea(int[] a) {
if(a.length < 2) return 0;
int res=0;
int l = 0, r = a.length-1;
// l-> | <- r, 所以r-l必定是递减的, 于是需要确定l和r何时需要移动
// 有点乱
while(l < r){
if(a[l] < a[r]){
res = Math.max(res, (r-l)*a[l]);
l++;
}else{
res = Math.max(res, (r-l)*a[r]);
r--;
}
}
return res;
}
}