题目:
示例:输入:[1,8,6,2,5,4,8,3,7]
输出:49
解析:根据图形可以看出容器能够容纳水的值为两个柱子的距离和柱子最低高度决定的。min( arr[j] , arr[i]) * (j-i);
所以可以利用循环依次判断各个范围的值
var maxArea = function(height) {
let res =0;
let cap =0
for(let i =0;i<height.length-1;i++){
for(let j =i+1;j<height.length;j++){
cap = Math.min(height[i],height[j])*(j-i);
res =cap>res?cap:res;
}
}
return res;
};
解析二:双指针法—先让两个指针分别指向开头和结尾,此时它们的间隔是最大的,计算它们容纳水的值,由于高度取决于最低的那个值,所以前后指针中高度最低的往中间移动,直到找到比它高的柱子(因为距离在减少,所以只有高度增大才有机会比之前的大),再重新计算面积,并和前面的比较,取最大值。
var maxArea = function(height) {
let left =0;
let right =height.length-1;
let res =0;
while(right>left){
let cap=Math.min(height[right],height[left])*(right-left);
res =cap>res?cap:res;
if(height[right]>=height[left]){
left++;
}else{
right--
}
}
return res;
};
本文章仅作为个人的学习记录,具体解题思路请查看以下网址!
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/container-with-most-water