Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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;
}
本文介绍了一种使用贪心策略解决最大化容器容量问题的方法,通过选择宽度最大的两个线段来形成容器,并通过循环比较两个端点的高度来确定最大容量。
651

被折叠的 条评论
为什么被折叠?



