美文网首页
leetcode:盛水最多的容器

leetcode:盛水最多的容器

作者: 井蛙可语 | 来源:发表于2018-05-28 01:06 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:leetcode:盛水最多的容器

          本文链接:https://www.haomeiwen.com/subject/lfqwjftx.html