zoukankan      html  css  js  c++  java
  • Leetcode 盛最多水的容器

     

    给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

    说明:你不能倾斜容器,且 n 的值至少为 2。

    图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

    示例:

    输入:[1,8,6,2,5,4,8,3,7]
    输出:49

    /*

    思路: 双指针,第一个指针指向数组头部,第二个指针指向数组尾部
        每次计算出来目前最大承载量,限制目前承载量的是i和j中量最小的那个.
        然后把量小的i或者j向对方靠近.
    */
    int maxArea(int* height, int heightSize){
        int i=0, j=heightSize-1;
        int area = 0, tmp;
    #define max(a, b) (a)>(b)?(a):(b)
    #define min(a, b) (a)<(b)?(a):(b)
        while (i<j) {
            tmp = (j-i) * (min(height[i], height[j]));
            area = (max(tmp, area));
            if (height[i]<height[j]) ++i;
            else --j;
        }
        return area;
    }
  • 相关阅读:
    2014年终总结
    杭电2014——青年歌手大奖赛_评委会打分
    nyoj---t448(寻找最大数)
    nyoj_t218(Dinner)
    将string转换成char*
    nyoj71--独木舟上的旅行
    基于贪心算法的几类区间覆盖问题
    会场安排问题—NYOJ14
    南阳理工ACM——106背包问题
    南阳理工91——阶乘之和
  • 原文地址:https://www.cnblogs.com/micoblog/p/13337857.html
Copyright © 2011-2022 走看看