开篇心得
依旧是数组,向下看题👇
题目复述
思考历程
个人认为,这道题首先要弄清题意,搞清楚这个水到底是怎么盛的。
明确一点,盛水的容量与两个因素有关:高度(取两端最小值)和宽度(作差)。要想使其两者乘积最大,即在宽度随着减小时,保证高度在增加。于是,思路就出来了:
用两个头尾索引,从两端开始遍历整个数组,不断像中间靠拢。当索引值的宽度比前面的宽度宽时,求解两者积并更新最大值。
解题代码(C语言)
int min(int a,int b)
{
if(a>=b)
{
return b;
}
else
{
return a;
}
}
int maxArea(int* height, int heightSize)
{
int i = 0;
int j = heightSize-1;
int maxx = 0;
int temp = 0;
while(i!=j)
{
temp = min(height[i],height[j])*(j-i);
if(min(height[i],height[j]) == height[i])
{
i++;
}
else
{
j--;
}
if(temp>maxx)
{
maxx = temp;
}
}
return maxx;
}
结题
ok,完成!
结语
又搞定一题,继续期待。。。。