leetcode:盛水最多的容器

2018-05-28  本文已影响38人  井蛙可语

参考链接:
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;
}
上一篇下一篇

猜你喜欢

热点阅读