leetcode-Container With Most Water

本文介绍了一种使用贪心策略解决最大化容器容量问题的方法,通过选择宽度最大的两个线段来形成容器,并通过循环比较两个端点的高度来确定最大容量。

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.


思路:运用贪心策略,先选取宽度最宽的
          i=0;  j=len-1
          当A[i]<A[j]时,i++(因为如果j--,不能增加max,只有寻找更高的A[i])
          否则,j--

代码:#include <iostream>
using namespace std;


//时间复杂度过大
//int maxArea(int *A, int len)
//{
// if(len <=0 )
// {
// return 0;
// }
//
// int maxWater=0;
// int startLine=0;
// int endLine=0;
// int water=0;
// for(int i=1; i<len; ++i)
// {
// for(int j=0; j<i; ++j)
// {
// if(A[i]<A[j])
// {
// water=(i-j)*A[i];
// if(water > maxWater)
// {
// maxWater=water;
// startLine=j;
// endLine=i;
// }
// }
// else
// {
// water=(i-j)*A[j];
// {
// if(water > maxWater)
// {
// maxWater=water;
// startLine=j;
// endLine=i;
// }
// }
// }
// }
// }
// return maxWater;
//}


/*运用贪心策略,先选取宽度最宽的
i=0;  j=len-1
当A[i]<A[j]时,i++(因为如果j--,不能增加max,只有寻找更高的A[i])
否则,j--*/
int maxArea(int *A, int len)
{
int maxwater=0;
if(len<=0)
{
return -1;
}
for(int i=0,j=len-1;i<j;)
{
if(A[i]<A[j])
{
if(maxwater<(j-i)*A[i])
{
maxwater=(j-i)*A[i];
}
++i;
}
else
{
if(maxwater<(j-i)*A[j])
{
maxwater=(j-i)*A[j];
}
--j;
}
}
return maxwater;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值