LeetCode 11. Container With Most Water

Problem

题目链接

Notes

题意很好理解,容器能盛水的高度取决于左右两边中较短的那一边。
我们先考虑左边被固定的情况,那么我们只能移动右边界,开始先把右边界固定在最右边,那么右边界左移的时候,底减少了,那么如果要使左移有意义,那么必须使右边界增高。否则的话底也减少了,高也减少了,面积是肯定减少的。
那么上述情况下,我们可以把右边界先固定在左边,然后把右边界右移吗?会发现这时候情况就变得复杂,因为右边界右移的这个情况下,底在增长,所以无论右边界变高还是变矮,都有可能使面积增大。况且我们现在已经简化了原问题(把左边固定住了),回到原问题这么做会变得更加复杂。
那么经过如上分析,我们就可以知道此题的解法了,在左右分别设置一个指针,从左右边界中较小的一边往较大的一边移动,那么,整个容器的高才可能会增大,即使底在不断减小,最后的总面积也有可能变大。

Codes

class Solution {
public:
    int maxArea(vector<int>& height) {
        int n=height.size();
        int ans=(n-1)*(height[0]<height[n-1]?height[0]:height[n-1]);
        int i=0,j=n-1;
        while(i<j)
        {
            height[i]<height[j]?++i:--j;
            ans=max(ans,(j-i)*(height[i]<height[j]?height[i]:height[j]));
        }
        return ans;
    }
};

Results

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值