一、题目解析
本题选自:. - 力扣(LeetCode)
本题要求容器体积为两条线之间的距离乘两条线中最低的一条线的高,输出容器体积最大值
二、讲解算法原理
本题给定了一个长度为n的整数数组height,而height中储存的值则为线高。由于木桶效应我们可以知道,决定一个容器的体积的是最短的木板,也就是最短的线。
所以如果我们定义两个指针:left,right。
left 代表的左指针,right 代表的右指针
那么该容器的体积可以看为:( right - left )乘以 height【left】和 height【right】中最短的一条。
所以我们可以设 left = 0 ,right = heightSize - 1
设一个临时体积 Vtmp 和最大体积 Vmax
Vtmp = ( right - left )* min(height【left】, height【right】)
若 Vtmp 大于 Vmax,则 Vmax = Vtmp
如果 height【left】< height【right】 则 left++ ,反之 right --
当 left = right 时停止以上操作
最终返回 Vmax 即为容器最大体积
最后本题代码如下:
int maxArea(int* height, int heightSize) {
int Vmax = 0;
int Vtmp = 0;
int left = 0 ,right = heightSize-1;
while(left < right){
Vtmp = (right - left) * (height[left] < height[right] ? height[left] : height[right]);
if(height[left] > height[right]){
right--;
}else{
left++;
}
Vmax = Vmax > Vtmp ? Vmax : Vtmp;
}
return Vmax;
}