11. 盛最多水的容器 - 力扣(LeetCode)
解释:因为木桶原理,能否盛最多的水是由最短的一块板决定的,所以容纳水的公式为:v= 两个数下标之差 * 短板高度。
思路:最优解法(双指针法)
从这张图可以看出:4和6组完后便不必再和2,5组了,因为向内组合只有两种可能,w在减小,要么不变要么减小。所以就可以把4干掉,留下的6再和剩下的数组合,此时虽然w一定减小,但短板可能会经过更新而增大。
所以可以看出每组一次数,就可以舍去一个数,直到left和right相遇,总共有right-left次计算出的体积,在这些体积中选最大值就是最后的结果。
class Solution
{
public:
int maxArea(vector<int>& height)
{
int left = 0, right = height.size()-1;
int max=0;
while(left!=right)
{
if(height[left]<height[right])
{
int v = height[left]*(right-left);
if(v > max)
{
max = v;
}
left++;
}
else
{
int v = height[right]*(right-left);
if(v>max)
{
max = v;
}
right--;
}
}
return max;
}
};