C++找出能盛水最大的容器(双指针)

在这里插入图片描述
1.首先我们思考一件事,决定容器大小的因素有两个:高度和宽度,两个变量,所以找出最大容器需要同时考虑这两个,那么为了解决问题,我们就需要先定一个因素,定高度显然不理想,还需要先查找,所以我们先找最大宽度,即数组两边的柱子,确定一个初始容器,那么就要接着找比原来还大的容器,就需要往中间移,怎么移就是我们接着要考虑的问题?
2.两个指针动一个宽度就要减一,这时我们需要先比较两边柱子谁高,显然如果移动较高的柱子,接下来的容器大小一定小于原来容器大小,(因为容器的高度是有较小的柱子决定的,宽度减小了,高度只会由接下来更小的柱子决定)就会丢失最大值,显然不对。
3.所以由此我们需要移动较小的哪根柱子,如此不会缺失最大值。
看代码:

class Solution {
public:
    int maxArea(vector<int>& height) {
    int res;
    int i=0,j=height.size()-1;
   while(i<j){
    int s=(j-i)*min(height[i],height[j]);
    res=max(s,res);
    if(height[i]<height[j]){
        i++;
    }
    else
     j--;
   }
   return res;
    }   
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值