输入:[1,8,6,2,5,4,8,3,7]
输出:49
思路:看到题目第一反应是双指针(自己没写出了)。本题可以暴力破解,也可采用双指针的方法。
- 暴力破解
var maxArea = function(height) {
let start =0
let maxHeight=0
let len = height.length
let res = 0
while(start<len-1){
if(height[start]>maxHeight){
maxHeight = height[start]
for(let i =start;i<len;i++){
res=Math.max(Math.min(height[start],height[i])*(i-start),res)
}
}
start++
}
return res
};
- 双指针
–头尾指针分别指向数组的首字符和尾字符,计算容积,然后将数字小的指针向中心移动,直至遍历所有位置。值得注意的是,当两个指针所指的数字是一样的时候,是可以任意移动一个的。原因在于当前面积就是以这两边为边界的最大面积,虽然过程中计算结果不一样,但并不会因此错过最大面积。具体代码如下:
var maxArea = function(height) {
let start =0
let end = height.length-1
let res = 0
while(start!=end){
res=Math.max(Math.min(height[start],height[end])*(end-start),res)
if(height[start]>height[end]){
end--
}else{
start++
}
}
return res
};