参考链接:
https://segmentfault.com/a/1190000008824222
链接讲的很详细了,就不说了。
下面max赋值用了两个三元运算符。
/********************************************************
盛水最多的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标
中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i
的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两
条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
注意:你不能倾斜容器,n 至少是2。
********************************************************/
#include <stdio.h>
/*暴力
int maxArea(int* height, int heightSize)
{
int i = 0;
int max = 0;
int j = 0;
int area = 0;
int side = 0;
for (i = 0; i < heightSize - 1; i++) {
for (j = i + 1; j < heightSize; j++) {
side = height[i] < height[j]? height[i] : height[j];
area = (j - i) * side;
if (area > max) {
max = area;
}
}
}
return max;
}*/
int maxArea(int* height, int heightSize)
{
int left = 0, right = heightSize - 1;
int max = 0;
int size = 0;
while (left < right) {
max = (max > (size = (right - left) * (height[left] < height[right] ? height[left]: height[right]))? max : size);
if (height[right] < height[left]) {
right--;
} else {
left++;
}
}
return max;
}
int main()
{
int p[] = {1,1};
int r;
r = maxArea(p,2);
printf("%d\n", r);
return 0;
}
网友评论