题目
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.
题意
从给定数组a[i]中找出 i,j使得 abs(j-i)*min(a[i],a[j])值最大
思路
刚开始使用两重循环,o(n^2),超时;改为贪心思想,每次只尝试有可能更优的解,最终遍历完后,时间复杂度o(n);
具体步骤 设i位于序列首,j位于序列尾,则若a[i]
int maxArea(int* height, int heightSize)
{
int max=0,f,a,i=0,j=heightSize-1;
while(i<j)
{
f=height[i]<height[j]?1:0;
if(f)
{
a=(j-i)*height[i];
i++;
}
else
{
a=(j-i)*height[j];
j--;
}
if(a>max)
{
max=a;
}
}
return max;
}