盛水最多的容器

题目描述:
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

看见题目的第一反应是暴力硬解,用两遍for循环,一下就写出了以下代码 

然而时间超时,

 于是看了一眼题解,要用双指针,双指针也接触过,所以一下子就想到了

int maxArea(intheight, int heightSize){
int max(int a,int b);
int min(int a,int b);
int l=0;
int r=heightSize-1;
int ans=0;
while(l<r){
ans=max(ans,min(height[l],height[r])(r-l));
if(height[l]<height[r]){
l++;
}else{
r--;
}
}
return ans;
}

int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
int min(int a,int b){
if(a<b){
return a;
}else{
return b;
}
}

果然AC成功!

要使装的水最多,就要是长方形面积最大(即长乘宽最大);长为两条垂线的最短边,宽为两条垂线的距离。
所以我们采用左右双指针,左右两边的时候宽最大,所以让短的一边往中间移,当移到的那条比原来长的时候比较面积,取两者的最大值,然后让两条边的较短的往中间移,直到循环结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝味啊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值