大概是要找到条纵线然后这两条线以及X轴构成的容器能容纳最多的水。
下面以例子: [4,6,2,6,7,11,2] 来讲解。
1、将他们原来的编号记下,同时排序得到[2:2, 2:6, 4:0, 6:1, 6:3, 7:4, 11:5]
2、高度是升序的,所以当前高度必为容器的高度,宽度计算为标号差值的最大,例:高为2时,宽为4,高为4时,宽为6.。。。。
代码运行超时,需要改变算法
class Solution {
public:
int maxArea(vector<int> &height)
{
map<int, int> object;
for(int i = 0; i < height.size(); i++)
{
object.insert(make_pair(height[i], i));
}
int result = 0;
map<int, int>::iterator it, ip, temp;
for(it = object.begin(); it != object.end(); it++)
{
int width = 0;
temp = it;
for(ip = temp++; ip != object.end(); ip++)
{
if(abs(ip->second - it->second) > width)
{
width = abs(ip->second - it->second);
}
}
if(width * it->first > result)
result = width * it->first;
}
return result;
}
};
版权声明:本文为u012289758原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。