傳入一個數組,
右邊減去左邊索引的差值 爲寬
左邊和右邊數值小的一個爲高
求水桶容積最大,也就是求 寬*高 最大的情況
可以想象成要給座標系,索引爲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