您的位置:首页 > 大数据 > 人工智能

Container With Most Water

2016-06-25 16:16 337 查看

问题描述:

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.

Note: You may not slant the container.
其实就是求 找出两条垂线来,与x轴构成的容器能盛更多的水。

算法:

设置两个两个指针i(只能向后移动)  j(只能向前移动)(不是真正意义的指针),初始的时候
i
指向第一个和 j 指向最后一个,求这两个指针和x轴构成的面积,然后判断 两个指针所值得高度的大小,小的那个指针移动一个单位,大的不动,如果两个指针所指的高度相等,那么同时移动,直到 i==j 或者 i>j 循环结束

时间复杂度

O(n)

代码实现:

int maxArea(vector<int>& height) {
int i=0;
int j=height.size()-1;
int value=0;
int height_max=0;

while(i<=j)
{
value=(j-i)*min(height[i],height[j]);
if(value>height_max)
height_max=value;
if(height[i]<height[j])
i++;
else if(height[i]>height[j])
j--;
else
{
i++;
j--;
}
}
return height_max;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: