传入一个数组,
右边减去左边索引的差值 为宽
左边和右边数值小的一个为高
求水桶容积最大,也就是求 宽*高 最大的情况
可以想象成要给坐标系,索引为x轴,数值为y轴,问:哪一个组合的封闭空间面积最大
解决办法一
let arr = [1,8,6,2,5,4,8,3,7]
//方法1
var maxArea = function (height) {
let max = 0;
let left = 0,right=height.length-1;
while(left<right){
const curArea = (right-left)*Math.min(height[left],height[right])
// 宽就是 右边索引和左边索引的差值
// 高就是 短的一条边,水桶能装多少水取决于最短的板
if(curArea>max){
max = curArea
}
if(height[left]>height[right]){
right--
}else{
left++
}
}
return max;
};
console.log(maxArea(arr)) //49
解决办法二
let arr = [1,8,6,2,5,4,8,3,7]
// 方法二
function maxArea2(arr) {
let max= 0;
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
const area = (j-i)*Math.min(arr[i],arr[j])
if(area>max){
max = area
}
}
}
return max;
}
console.log(maxArea2(arr)) //49