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;
    }
  • 相关阅读:
    JavaScript_01简介,基本语法,运算符
    JAVA_内部类
    JAVA_接口_默认方法&静态方法
    软件工程_01面向对象分析
    mybatis_16逆向工程
    mybatis_15整合ehcache
    mybatis_14二级缓存
    mybatis_13一级缓存
    mybatis_12延时加载_懒加载
    JWT如何在Spring Cloud微服务系统中在服务相互调时传递
  • 原文地址:https://www.cnblogs.com/micoblog/p/13337857.html
Copyright © 2011-2022 走看看